Files
baekjoon-study/workbook_8708/silver/1522-s1.py
2026-02-23 11:14:50 +09:00

32 lines
924 B
Python

# 문자열 교환
import sys
input = sys.stdin.readline
def solution():
s = input().rstrip()
k = s.count("a")
k_count = {"a": s[:k].count("a"), "b": s[:k].count("b")}
circle = s + s
result = k_count["b"]
for i in range(1, len(circle)-k):
k_count[circle[i-1]] -= 1
k_count[circle[i+k-1]] += 1
result = min(result, k_count["b"])
print(result)
return
solution()
"""
걸린 시간: 못 품
시간 복잡도: 전체에서 a의 개수(k)를 세고, k구간씩 옮겨가며 b개수를 슬라이딩 윈도우로 업데이트하기 때문에 전체 시간복잡도는 O(n)이다.
해설: 원형이라고 했기 때문에 같은 것 2배를 해준 문자열을 만든다. 여기서 기존 a가 다 연속이면 되기 때문에
a의 개수 k를 구해서 원형에서 k구간씩 확인하며 b를 다 빼주면 되는데, 이때 b개수의 최소값이 답이다.
"""