728x90
반응형
https://www.acmicpc.net/problem/1522
문제
a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오.
이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 있는 것이다.
예를 들어, aabbaaabaaba이 주어졌을 때, 2번의 교환이면 a를 모두 연속으로 만들 수 있다.
입력
첫째 줄에 문자열이 주어진다. 문자열의 길이는 최대 1,000이다.
출력
첫째 줄에 필요한 교환의 회수의 최솟값을 출력한다.
풀이
Code
import sys
input = sys.stdin.readline
string = input().strip()
# 1. 윈도우 사이즈 설정
window_size = string.count("a")
# 2. a가 없을 경우 0 출력
if window_size == 0 : print(0)
# 3. 이외의 경우
else :
# 3-1. 순환 문자열 생성
string += string
# 3-2. 문자별 카운트 딕셔너리 생성
count = {"a" : 0, "b" : 0}
# 3-3. 초기값 설정
for s in string[:window_size] : count[s] += 1
# 3-4.
ans = float("INF")
for end in range(window_size, len(string)) :
start = end - window_size + 1
# 3-4-1. 문자별 카운트 딕셔너리 업데이트
count[string[start-1]] -= 1
count[string[end]] += 1
# 3-4-2. 최솟값 업데이트
ans = min(ans, count["b"])
# 3-5. 결과 출력
print(ans)
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 2688. 줄어들지 않아 (0) | 2024.07.29 |
---|---|
[Python/BOJ] 7682. 틱택토 (0) | 2024.07.18 |
[Python/BOJ] 2668. 숫자고르기 (0) | 2024.07.11 |
[Python/BOJ] 2294. 동전 2 (0) | 2024.07.11 |
[Python/BOJ] 2493. 탑 (0) | 2024.07.08 |