728x90
문제 설명
- 문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
- 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
제한사항
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
s = "banana"
s1 = "abracadabra"
s2 = "aaabbaccccabba"
s3 = 'aaa'
# 위에서 부터 각각 3, 6, 3, 1이 나와야한다.
def solution(s):
answer = 0
# s를 리스트로 만든다.
s = list(s)
# 같은 요소를 넣을 same과 다른 요소를 넣을 dif를 만든다.
same = []
dif = []
# s가 True 즉 존재하면 계속 반복한다.
while s:
# s의 맨 처음 요소를 same에 pop하여 집어넣는다.
# 이때 s의 맨 처음 요소는 사라진다.
same.append(s.pop(0))
# s의 길이만큼 반복한다.
# 이때 변수가 필요 없으므로 "_"를 사용한다.
for _ in range(len(s)):
# 만약 same과 dif의 길이가 같으면 반복을 종료한다.
if len(same) == len(dif):
break
# 만약 s의 첫번째 요소와 same의 첫번째 요소가 같으면
# same의 마지막요소로 집어넣는다.
# 이때 s의 첫요로를 pop해서 가져오므로 s의 첫 요소는 사라진다.
elif s[0] == same[0]:
same.append(s.pop(0))
# 만약 s의 첫번째 요소와 same의 첫번째 요소가 다르면
# dif의 마지막요소로 집어넣는다.
# 이때 s의 첫요로를 pop해서 가져오므로 s의 첫 요소는 사라진다.
elif s[0] != same[0]:
dif.append(s.pop(0))
# same과 dif의 길이가 같아 반복이 종료되면
# same과 dif의 요소를 모두 제거한다.
same.clear()
dif.clear()
# answer에 1을 더한다.
answer += 1
# 다시 while시작 지점으로 가는데
# 만약 s가 존재하면 계속 while을 반복하고
# s가 존재하지 않으면 while을 종료한다.
return answer
# 함수를 실행하면 예측한 값이 정상 출력된다.
print(solution(s))
print(solution(s1))
print(solution(s2))
print(solution(s3))
# 3, 6, 3, 1
다른 사람의 풀이
def solution(s):
answer = 0
# sav1과 sav2변수를 만듭니다.
sav1=0
sav2=0
# for문을 돌려 s의 요소 하나하나를 i에 집어넣어 반복 실행 합니다.
for i in s:
# 만약 sav1과 sav2가 같다면
if sav1==sav2:
# asnwer에 1을 더하고
answer+=1
# i의 값을 a라는 변수를 만들어 집어 넣습니다.
a=i
# 만약 i와 a가 같다면
if i==a:
# sav1에 1을 더하고
sav1+=1
# 같지 않다면
else:
# sav2에 1을 더합니다.
sav2+=1
return answer
print(solution(s))
print(solution(s1))
print(solution(s2))
print(solution(s3))
# 3, 6, 3, 1
728x90
'코딩 테스트' 카테고리의 다른 글
14. 기사단원의 무기 - 프로그래머스 코딩 테스트(python) (0) | 2023.02.23 |
---|---|
13. 명예의 전당(1) - 프로그래머스 코딩테스트 (0) | 2023.02.23 |
11. (2레벨)게임맵 최단거리 - 프로그래머스 코딩테스트 (0) | 2023.02.21 |
10. 같은 숫자는 싫어 - 프로그래머스 코딩테스트 (0) | 2023.02.20 |
9. 가운데 글자 가져오기 - 프로그래머스 코딩테스트 (0) | 2023.02.20 |