연습장

8. 문자열 나누기 본문

프로그래머스/1단계

8. 문자열 나누기

js0616 2023. 12. 12. 01:39

 

프로그래머스를 풀다보면 종종 글을 이해를 잘 못하는 기분이 들곤한다.

 

첫 문자와 나머지 문자의 횟수를 샌다. 

두 횟수가 같아지면 하나의 단어로 끊는다.

 

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