728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/140108
주어진 문자열을 규칙에 따라 분리하는 문제이다.
내 풀이
def solution(s):
# 분해한 문자열의 개수
answer = 0
# 문자열을 분해할 수 없을 때까지 반복
while len(s) != 0:
yes_x, no_x = 0, 0 # x와 같은 글자 수, x와 다른 글자 수
for i in range(len(s)):
if s[i] == s[0]:
yes_x += 1
else:
no_x += 1
# 두 횟수가 같아지면 문자열 분리
if yes_x == no_x:
answer += 1
s = s[i+1:]
break
else: # for 루프가 break 없이 끝났을 때 (문자열 끝까지 갔을 때)
answer += 1
break
return answer
while 문을 이용하여 풀어보았다.
문자열을 분해할 수 없을 때까지 반복을 진행하는데,
각 반복마다 첫 글자와 같은 글자 수, 첫 글자와 다른 글자 수를 세어 yes_x, no_x에 저장한다.
이 때, 두 개수가 같아지면 문자열을 분해하고, 분해한 문자열을 새로운 s로 정의하며, 답을 증가시킨다.
만약, 문자열 루프를 계속 돌아도 yes_x와 no_x가 같아지지 않으면,
남은 부분을 하나의 문자열로 간주하여 break를 진행한다.
for - else
for x in [1, 2, 3, 4]:
if x % 3:
print(x) # x가 3의 배수가 아니면 출력
else:
break # x가 3의 배수이면 반복문에서 빠져나감
else:
print("리스트의 원소를 모두 출력했어요")
"""
1
2
"""
위는 for-else 구문의 예시이다.
for - else는 반복문을 break 하였을 때는 실행하지 않으며,
모든 반복을 순회했지만, break가 실행되지 않았을 때 else 구문이 실행되게 된다.
즉, for문이 break로 중간에 빠져나오지 않고 끝까지 실행되었을 경우 else문이 실행되는 것이다.
이는 유사하게 while - else로도 사용할 수 있다!
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 1 둘만의 암호 (0) | 2024.07.31 |
---|---|
[프로그래머스][PYTHON] Lv. 1 카드 뭉치 (0) | 2024.07.31 |
[프로그래머스][PYTHON] Lv. 1 가장 가까운 같은 글자 (0) | 2024.07.29 |
[백준][PYTHON] 11723번 집합 (1) | 2024.07.24 |
[백준][PYTHON] 1157번 단어 공부 (0) | 2024.06.06 |