코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 1 가장 가까운 같은 글자

_알파카 2024. 7. 30. 17:45
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/140108

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

주어진 문자열을 규칙에 따라 분리하는 문제이다. 

 

 

내 풀이

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