💡문제 설명 및 예시
문제는 주어진 문자열을 특정 규칙에 따라 여러 개의 부분 문자열로 분해하고, 그 개수를 반환하는 것입니다. 다음과 같은 과정을 따릅니다:
- 문자열의 첫 글자(x)를 기준으로 설정합니다.
- 문자열을 왼쪽에서 오른쪽으로 읽어가며 x의 등장 횟수와 x가 아닌 글자의 등장 횟수를 세어 갑니다.
- 두 횟수가 같아지는 순간을 찾아 그 지점까지의 부분 문자열을 분리합니다.
- 분리된 부분을 제외한 나머지 문자열에 대해 위 과정을 반복합니다.
- 남은 문자열에 더 이상 글자가 없거나 두 횟수가 같아질 때까지 계속 분리합니다.
- 최종적으로 분해된 문자열의 개수를 반환합니다.
예를 들어 "banana"는 "ba", "na", "na"로 분해되며, 결과적으로 3개의 부분 문자열로 나뉩니다.
💡작성코드 1 (정답)
def solution(s):
answer = 0 # 분해된 부분 문자열의 개수를 카운트하기 위한 변수
x = s[0] # 첫 글자를 x로 설정
same = 0 # x와 같은 글자의 개수를 세는 변수
diff = 0 # x와 다른 글자의 개수를 세는 변수
# 문자열 s의 각 글자에 대해 반복
for idx, s_ in enumerate(s):
# 현재 글자가 x와 같다면 same 카운터 증가
if x == s_:
same += 1
# 현재 글자가 x와 다르다면 diff 카운터 증가
else:
diff += 1
# same과 diff가 같아지고, 마지막 인덱스가 아닌 경우
if (same == diff) & (idx != len(s) - 1):
answer += 1 # 분해된 문자열의 개수를 1 증가
x = s[idx + 1] # 다음 부분 문자열의 시작 글자를 새로운 x로 설정
same = 0 # same 카운터 초기화
diff = 0 # diff 카운터 초기화
# 모든 검사가 끝난 후, 마지막으로 카운트된 부분 문자열을 포함하기 위해 +1
return answer + 1
반응형
'Programming > Python' 카테고리의 다른 글
[프로그래머스 Python] 체육복 (0) | 2024.08.06 |
---|---|
[프로그래머스 Python] 숫자 짝꿍 (0) | 2024.08.02 |
[프로그래머스 Python] 기사단원의 무기 (1) | 2024.07.24 |
[프로그래머스 Python] 소수 만들기 (0) | 2024.07.18 |
[프로그래머스 Python] 카드 뭉치 (0) | 2024.07.17 |