문제
https://school.programmers.co.kr/learn/courses/30/lessons/140108
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문자열이 주어질 때, 아래의 규칙을 따라서 문자열을 분해하고 분해한 문자열의 개수를 구하는 문제다.
먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 지금까지 읽은 문자열을 분리하고, 종료합니다.
제한사항
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
예시
Example 1:
s: "banana"
resule: 3
Example 2:
s: "abracadabra"
resule: 6
Example 3:
s: "aaabbaccccabba"
resule: 3
처음 문제를 읽었을 때, 문제가 요구하는 바를 바로 이해하기 어려웠다.
예제들을 보면서 직접 노트에 작성해 보니 이해하는 데 도움이 됐다...........ㅎㅎ
(문제 이해하는 데 꽤 걸렸던 것 같다..🤣)

풀이
문제를 이해한 그대로 구현하려고 노력한 풀이 -> 다소 많은 조건문..
def solution(s):
answer = 0
cnt_x, cnt_notx = 0, 0
x = s[0]
for i in range(len(s)):
if s[i] == x:
cnt_x += 1
else:
cnt_notx += 1
if cnt_x == cnt_notx:
answer += 1
cnt_x, cnt_notx = 0, 0
if i + 1 < len(s):
x = s[i+1]
if cnt_x != 0 or cnt_notx != 0:
answer += 1
return answer
- 첫 번째 문자(x)를 기준으로 개수를 센다.
- x와 같은 문자 개수와 다른 문자 개수가 같아지면 answer 증가
- 마지막에 남은 문자열이 있다면 추가적으로 answer 증가
다른 방법 풀이
불필요한 인덱스 접근과 조건문 줄이는 방향으로 개선
def solution(s):
answer = 0
cnt_x, cnt_notx = 0, 0
x = ""
for i in s:
if cnt_x == cnt_notx:
x = i
answer += 1
cnt_x += 1
elif x == i:
cnt_x += 1
else:
cnt_notx += 1
return answer
'알고리즘' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 - 파이썬/python (0) | 2025.03.05 |
---|---|
[프로그래머스] 카드 뭉치 - 파이썬/python (0) | 2025.02.13 |
[프로그래머스] 아날로그 시계 - 파이썬/python (0) | 2025.02.05 |
[프로그래머스] N개의 최소공배수 - 파이썬/python (0) | 2025.01.19 |
[프로그래머스] 주식가격 - 파이썬/python (0) | 2024.11.27 |