a가 연속적이여야 한다는 말은 a가 a의 개수 만큼 연속적으로 위치해야 한다는 뜻이다.
예를 들어, "ababa" 라는 문자열이 있다면, a가 3개이므로 "aaabb", "baaab", "bbaaa".... 등 a가 3개 연속적으로 위치해야한다.
따라서, 인덱스 0 부터 끝까지 a의 개수 만큼의 길이를 슬라이딩 윈도우로 생각하고 b의 개수를 세면 b를 교환하면 된다.
예를 들어, "ababa" 라는 문자열이 있다고 하자. 이때 a의 개수는 3개이다.
인덱스 0 : ababa -> b가 1개 -> 한 번의 교환 필요
인덱스 1 : ababa -> b가 2개 -> 두 번의 교환 필요
인덱스 2 : ababa -> b가 1개 -> 한 번의 교환 필요
인덱스 3 : ababa -> b가 1개 -> 한 번의 교환 필요
인덱스 4 : ababa -> b가 1개 -> 한 번의 교환 필요
import sys
x=sys.stdin.readline().rstrip()
numA=x.count('a')
#print(numA)
listNum=[]
#print(listNum)
for k in range(len(x)):
stringNew=x[k:numA+k]
n=len(stringNew)
numBefore=0
if(len(stringNew)<numA):
stringBefore=x[0:numA-n]
# print(stringBefore)
numBefore=stringBefore.count('b')
#print(stringNew)
numB=stringNew.count('b')
listNum.append(numB+numBefore)
#print(listNum)
#print(listNum)
print(min(listNum))
'Problem Solving > 알고리즘' 카테고리의 다른 글
[백준] [파이썬] 11497 - 통나무 건너뛰기 (1) | 2022.07.06 |
---|---|
[백준][파이썬] - 1263 시간관리 (0) | 2022.07.05 |
[백준]1254 - 팰린드롬 만들기 (0) | 2022.06.30 |
KMP 알고리즘 : 문자열 검색 알고리즘 (백준-16916) (0) | 2022.06.28 |
#브루트 포스 (Brute Force) (0) | 2022.05.17 |