연습장
8. 문자열 나누기 본문
프로그래머스를 풀다보면 종종 글을 이해를 잘 못하는 기분이 들곤한다.
첫 문자와 나머지 문자의 횟수를 샌다.
두 횟수가 같아지면 하나의 단어로 끊는다.
3번의 예시를 보면
a | a | a | b | b | a | c | c | |
a | 1 | 2 | 3 | 3 | 3 | 4 | 4 | 4 |
나머지 | 0 | 0 | 0 | 1 | 2 | 2 | 3 | 4 |
4,4 로 같아져서 aaabbacc 의 한 단어로 마무리 된다.
c | c | a | b | |
c | 1 | 2 | 2 | 2 |
나머지 | 0 | 0 | 1 | 2 |
2,2 로 같아져서 ccab 로 한 단어가 되고
b | a | |
b | 1 | 1 |
나머지 | 0 | 1 |
1,1 로 같아져서 ba 로 한 단어가 된다.
총 3단어로 result = 3 이된다.
1. 첫 글자가 어떤건지 저장
2. 다음 글자가 처음과 같은지에 따라서 각각 카운트
3. 같아지면 단어로 처리
def solution(s):
answer = 0
my_same = 0 # 기준 문자 갯수
my_other = 0 # 다른 문자 갯수
k = 0 # 기준 문자 위치
for i in range(len(s)):
if s[i] == s[k]:
my_same +=1
else :
my_other +=1
# 조건 확인
if my_same == my_other:
answer += 1
k = i+1 # 기준 문자 위치 변경
return answer
위의 코드에서 문제점이 있는데
1의 na 처럼 1,1 로 끝나면 좋겠지만
2번의 테스트 케이스처럼 a 와 같이 끝나는 경우 1,0 으로 끝나게 되는데
이걸 1개의 단어를 더 추가해 주어야 한다.
따라서 다음과 같이 처리해준다.
def solution(s):
answer = 0
my_same = 0 # 기준 문자 갯수
my_other = 0 # 다른 문자 갯수
k = 0 # 기준 문자 위치
for i in range(len(s)):
if s[i] == s[k]:
my_same +=1
else :
my_other +=1
# 조건 확인
if my_same == my_other:
answer += 1
k = i+1 # 기준 문자 위치 변경
# 문자의 마지막
if i == len(s)-1:
# 같지 않을 경우 1개의 단어로 처리
if my_same != my_other:
answer += 1
return answer
'프로그래머스 > 1단계' 카테고리의 다른 글
10. 카드 뭉치 (0) | 2023.12.15 |
---|---|
9. 완주하지 못한 선수 (0) | 2023.12.14 |
7. 체육복 (0) | 2023.12.12 |
6. 숫자 짝궁 (0) | 2023.12.12 |
5. 로또의 최고 순위와 최저 순위 (0) | 2023.12.11 |