TODAY TIL
오늘은 문자열을 특정 규칙에 따라 여러 덩어리로 나누는 문제를 해결해 보았습니다. 이 문제에서는 주어진 문자열을 기준에 따라 잘라내어, 분리된 덩어리 개수를 구해야 했습니다.
문제 설명
문자열 s가 주어졌을 때, 다음 규칙을 따라 문자열을 여러 문자열로 분해합니다.
- 첫 글자를 읽고, 이 글자를 x로 설정합니다.
- 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
- 두 횟수가 처음으로 같아지는 순간, 지금까지 읽은 문자열을 하나의 덩어리로 분리합니다.
- 분리한 문자열을 제외하고 남은 문자열에 대해서 같은 과정을 반복합니다.
- 문자열이 모두 처리될 때까지 반복하며, 분리된 문자열의 개수를 반환합니다.
예시:
- 입력: "banana"
- 출력: 3 (분리된 문자열: ["ba", "na", "na"])
해결 과정
문제를 해결하기 위해 다음 단계로 접근했습니다.
- 첫 글자 선택하기: 문자열에서 첫 글자를 x로 설정합니다.
- 글자 수 세기: 첫 글자 x의 개수와 x가 아닌 글자의 개수를 세면서 진행합니다.
- 덩어리 분리: 두 개의 개수가 같아지는 순간을 기준으로 덩어리를 분리합니다.
- 남은 문자열 반복: 문자열의 끝까지 위 과정을 반복하여 남은 모든 문자열을 분리합니다.
코드 구현
아래는 이 문제를 해결하는 Python 코드입니다.
def solution(s):
answer = 0 # 분리된 덩어리 개수
i = 0 # 현재 위치를 나타내는 인덱스
while i < len(s): # 문자열의 끝까지 읽을 때까지 반복
x = s[i] # 첫 글자를 x로 설정
count_x = 0 # x의 개수를 세는 변수
count_other = 0 # x가 아닌 글자의 개수를 세는 변수
# x와 다른 글자들을 세어가며 두 개가 같아질 때까지 진행
while i < len(s):
if s[i] == x:
count_x += 1 # x 글자가 나오면 count_x 증가
else:
count_other += 1 # 다른 글자가 나오면 count_other 증가
i += 1 # 다음 글자로 이동
# x와 다른 글자의 개수가 같아지면 덩어리 분리
if count_x == count_other:
answer += 1 # 덩어리 하나 추가
break # 분리 후 다시 반복
# 남은 문자열이 있으면 마지막 덩어리로 추가
if i == len(s) and count_x != count_other:
answer += 1
return answer
코드 설명
- 첫 글자 설정: 처음 x를 설정해주고, count_x와 count_other를 초기화합니다.
- 문자 개수 세기: count_x는 x 글자, count_other는 x가 아닌 글자의 개수를 나타내며, 둘이 같아질 때마다 덩어리를 하나 추가합니다.
- 남은 문자열 처리: 문자열 끝까지 다 읽었는데도 두 개수가 다르다면 남은 문자열을 마지막 덩어리로 간주합니다.
예제 테스트
# 예제 입력
print(solution("banana")) # 출력: 3
print(solution("abracadabra")) # 출력: 6
print(solution("aaabbaccccabba")) # 출력: 3
배운 점
- 문자열의 특정 규칙을 기준으로 구분해야 할 때, 문자를 카운팅하는 방법이 유용하다는 것을 알게 되었습니다.
- 분리 조건에 따라 반복문을 중간에 빠져나오거나 특정 조건을 설정하는 것이 중요함을 깨달았습니다.
- 알고리즘의 기초를 배우는게 중요하다는걸 느꼈습니다.
이 포스팅을 통해 문자열 분리 문제를 규칙적으로 해결하는 방법을 익힐 걸 공유할수 있어서 좋았습니다.
'python' 카테고리의 다른 글
99클럽 코테 스터디_4기 5일차 TIL (0) | 2024.11.01 |
---|---|
99클럽 코테 스터디_4기 4일차 TIL (0) | 2024.10.31 |
99클럽 코테 스터디_4기 2일차 TIL (1) | 2024.10.29 |
99클럽 코테 스터디_4기 1일차 TIL (0) | 2024.10.28 |
99클럽 코테 스터디 31일차 TIL (0) | 2024.06.29 |