Skip to content

[PGS] 문자열 나누기 - #77

Open
been12151 wants to merge 14 commits into
mainfrom
week4/split-string
Open

[PGS] 문자열 나누기#77
been12151 wants to merge 14 commits into
mainfrom
week4/split-string

Conversation

@been12151

Copy link
Copy Markdown
Owner

🍪 문제 이름

Resolve: 문자열 나누기

🍊 문제 정의

input

  • s : 영어 소문자로만 이루어진 문자열 (1 ≤ 길이 ≤ 10,000)

output

  • 규칙에 따라 문자열을 분해했을 때 나뉘어지는 문자열의 개수
  • 규칙: 첫 글자 x를 기준으로, x와 같은 글자 수 / x와 다른 글자 수를 세다가 두 수가 같아지면 분리. 끝까지 같아지지 않으면 남은 부분도 하나로 분리

예시

s result
"banana" 3
"abracadabra" 6
"aaabbaccccabba" 3

🍑 알고리즘 설계

cnt로 기준 글자와의 등장 횟수 차이를 추적. cnt == 0일 때 새 구간이 시작되므로 기준 글자(std)를 갱신하고 answer를 1 증가.
이후 현재 글자가 std와 같으면 cnt를 1 증가, 다르면 1 감소. cnt가 다시 0이 되면 다음 글자에서 새 구간이 시작되는 구조.
끝까지 cnt가 0이 되지 않아도 처음 구간 시작 시 answer를 이미 올렸기 때문에 별도 처리 없이 자연스럽게 카운트됨.

def solution(s):
    answer = 0
    cnt = 0
    std = 0

    for i in s:
        if cnt == 0:
            std = i
            answer += 1

        if i == std:
            cnt += 1
        else:
            cnt -= 1

    return answer

🥝 최악 수행 시간 복잡도

  • O(n) (n = s의 길이)
  • 문자열을 한 번 순회하며 각 글자에 대해 O(1) 연산만 수행

🍰 특이 사항 (Optional)

구간 시작 시 answer를 먼저 올리는 구조 덕분에 끝까지 cnt가 0이 되지 않는 경우(마지막 구간)도 별도 처리 없이 자연스럽게 카운트됨.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[PGS] 지게차와 크레인 / level 2 [PGS] 문자열 나누기 / level 1

2 participants