문제
문제 설명
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
입력 & 출력
입출력 예
sresult
"banana" | 3 |
"abracadabra" | 6 |
"aaabbaccccabba" | 3 |
풀이 과정
1. 정답인 answer가 늘어나는 경우는 간단하게 생각해서 x의 개수와 x가 아닌 것의 개수가 일치할 때이고 이를 조건문에서 판별할 수 있게 구성한다. 이는 코드의 6번째 줄에 기입되어 있다.
- 처음 시작할 때는 x와 other count가 모두 0이므로 answer의 값이 1 증가하면서 시작되는데 개념적으로는 모순되지만 첫 번째 경우를 제외하고 마지막에 1을 더하는 것과 그냥 첫번째 경우에도 1을 증가하고 시작하는 것이 결과적으로 같아서 유지하였다.
2. 1번의 조건문 판별은 문자열 s를 한 개씩 순회하면서 실행하여야 하므로 for문을 이용해서 s를 하나씩 순회하도록 구성한다.
3. 만약 개수가 일치하지 않는 다면 두 가지 중에 하나를 수행한다. 첫 번째로는 x가 확인하는 문자열 s의 한 개의 unit과 같을 경우 x의 값이 하나 더 나온 것이므로 x_count의 증가 이런 경우가 아닌 경우 other_number_count의 증가를 하는 방식이다.
4. 이렇게 1번의 x의 개수와 ohter_number의 개수를 판별할 때 x 값을 변경하면서 진행하면서 answer값을 증가시키면 원하는 값을 얻을 수 있다.
코드
def solution(s):
answer = 0
x_count = 0
other_number_count = 0
for i in s:
if x_count == other_number_count:
answer += 1
x = i
if x == i:
x_count += 1
else:
other_number_count += 1
return answer
'Algorithm' 카테고리의 다른 글
[프로그래머스] 개인정보 수집 유효기간 (0) | 2023.01.11 |
---|---|
[프로그래머스] 다항식 더하기 - 반쪽 리뷰 (0) | 2022.12.17 |
[프로그래머스] 소수 찾기 - 2번째 (0) | 2022.12.17 |
[프로그래머스] 구명보트 (0) | 2022.10.22 |
[프로그래머스] 평행 (0) | 2022.10.04 |