본문 바로가기
코딩테스트 파이썬/백준

문자열 교환 ( 1522 번 )

by 세용용용용 2025. 8. 20.

1522번: 문자열 교환

 


🧠 알고리즘

  • 슬라이딩 윈도우(Sliding Window)

 

✔️ 동작 방식

  • 윈도우 크기는 a_count가 됨.
  • 원형 문자열이므로, 문자열을 2배로 확장(new_str = n_str * 2).
  • 윈도우 안의 b 개수는 "해당 구간에서 a로 채워야 하는 교환 횟수"를 의미한다.
  • 모든 구간을 확인한 후, 최소 교환 횟수를 결과로 반환한다.

 

🧾 코드

import sys

def _main(n_str):
    answer = float('inf')
    a_count = n_str.count('a')
    new_str = n_str * 2

    for idx in range(len(n_str)):
        window = new_str[idx:idx + a_count]
        answer = min(answer, window.count('b'))
    
    return answer


n_str = sys.stdin.readline().rstrip()
print(_main(n_str))

 

⏱️ 시간 복잡도

for idx in range(len(n_str)) : 문자열 길이 만큼 순회 ( 선형 시간 복잡도 )
	answer = min(answer, window.count('b')) : 원도우 사이즈에서 'b' 찾기 ( 선형 시간 복잡도 )

해당 알고리즘 시간 복잡도 : 이차형 시간 복잡도 ( O(n ** 2) )

'코딩테스트 파이썬 > 백준' 카테고리의 다른 글

성준이와 초콜릿 ( 1674 번 )  (0) 2025.08.21
금민수의 개수 ( 1527 번 )  (0) 2025.08.20
기타콘서트 ( 1497 번 )  (0) 2025.08.19
기타리스트 ( 1495 번 )  (1) 2025.08.18
밑 줄 ( 1474 번 )  (0) 2025.08.17