📜 문제 설명
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
제한사항
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
입출력 예
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/140108
💡 문제 풀이
그닥 깔끔한 풀이는 아닌듯 하지만 요즘 아주 잘써먹는 Counter를 한 번 더 써보았다!!!
이번에도 급한 성격 때문에 문제를 제대로 안 읽고 손부터 움직였다가 더 시간을 많이 썼다... 😂😂 진챠 왜 이래...
이 문제에서 특정 문자열을 앞에서 부터 짝수 갯수를 잘라가면서 확인한다. 입력된 문자열이 banana라면 처음에 문자열을 짝수 개인 2개를 자르면 b 한 개, a 한 개 니까 b인 문자열의 갯수와 b가 아닌 문자열의 갯수가 일치한다. 그래서 정답에 1을 더해주고 그 다음 문자를 확인한다.
이 때 특정 문자인 알파벳과 특정 문자가 아닌 알파벳의 문자 갯수가 일치하려면 문자를 짝수 개로 잘랐을때만 가능하니까 짝수개씩 잘라서 확인하면 된다. 인덱스로 생각하면 0~1번 까지 확인했다가 일치하지 않으면 늘려서 0~3번까지 확인하고 또 일치하지 않으면 0~5번까지 확인하는 방식이다. 0~5번까지 확인해서 일치하면 이제는 6~7번을 확인한다.
그래서 나는 start, mid, end 변수를 두고 확인했다.
from collections import Counter
def solution(s):
answer = 0
cnt_list = []
# 인덱스는 아무래도 리스트가 있어야 편하기 때문에
# 변수 문자열을 리스트화 해주었다
for i in range(len(s)):
cnt_list.append(s[i])
# 0번 인덱스에서 시작해서 끝까지 확인
st, en = 0, len(cnt_list)
# 항상 짝수개씩 확인하면 되니까 mid는
# 2 4 6 8 ....
mid = 2
while st < en:
tmp_cnt = Counter(cnt_list[st:mid])
a = cnt_list[st]
# 첫 글자의 갯수가 현재까지 잘린 문자열의 갯수에서 절반을 차지하면
# 1을 더해주고 st -> mid로, mid에는 2를 더함
if tmp_cnt[a] == sum(tmp_cnt.values()) / 2:
answer += 1
st = mid
mid += 2
# 예외 처리
# 확인 대상인 문자가 하나 남았거나 mid가 en보다 커지면
# 1만 더해주고 끝낸다
elif (len(tmp_cnt) == 1 and tmp_cnt[a] == 1) or mid > en:
answer += 1
st = en
# 위의 두 경우가 모두 아니라면 mid를 2 늘려서
# 확인해본다
else:
mid += 2
return answer
반응형
'✨APS (Algorithm Problem Solving) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] LV.4 도둑질 / 파이썬(Python) (0) | 2022.12.14 |
---|---|
[프로그래머스] LV.2 디펜스 게임 / 파이썬(Python) (0) | 2022.12.13 |
[프로그래머스] LV.3 여행경로 / 파이썬(Python) (0) | 2022.11.30 |
[프로그래머스] LV.2 귤 고르기 / 파이썬(Python) (0) | 2022.11.28 |
[프로그래머스] LV.1 숫자 짝꿍 / 파이썬(Python) + TMI 나의 성장기 (0) | 2022.11.25 |