[백준 1522번] 문자열 교환

박형진·2022년 10월 30일
0

https://www.acmicpc.net/problem/1522


1. 코드

"""
이 문제가 브루트포스인 이유는 'a'가 연속되어 나타낼 수 있는 모든 경우를 모두 탐색하고
그 중 가장 최소 교환 횟수를 구해야 하기 때문이다.

연속된 'a'인 문자열의 경우를 슬라이딩 윈도우를 통해 하나씩 탐색한다.
답이 될 수 있는 문자열을 만든 후, 처음 입력값과 비교한다.

abababababababa
aaaaaaaabbbbbbb 4
baaaaaaaabbbbbb 4
bbaaaaaaaabbbbb 4
bbbaaaaaaaabbbb 4
bbbbaaaaaaaabbb 4
bbbbbaaaaaaaabb 4
bbbbbbaaaaaaaab 4
bbbbbbbaaaaaaaa 4
abbbbbbbaaaaaaa 3
aabbbbbbbaaaaaa 4
aaabbbbbbbaaaaa 3
aaaabbbbbbbaaaa 4
aaaaabbbbbbbaaa 3
aaaaaabbbbbbbaa 4
aaaaaaabbbbbbba 3
3
"""
ans = 99999
chars = input()
len_a = chars.count('a')
init = 'a' * len_a
for start in range(len(chars)):
    # todo: start 인덱스를 연속된 'a'의 시작점으로 가지는 문자열 생성
    result = ''
    end = start + len_a - 1
    if end > len(chars) - 1:
        end = len(chars) - 1
        over = len_a - (end - start + 1)
        result += 'a' * over
        result += 'b' * (len(chars) - len_a)
        result += 'a' * (end - start + 1)
    else:
        result += 'b' * start
        result += 'a' * len_a
        result += 'b' * (len(chars) - len(result))
    # todo: 처음 입력값과 비교하여 다르면 +=1, 마지막에 2로 나누기
    cnt = 0
    for i in range(len(chars)):
        if chars[i] != result[i]:
            cnt += 1
    # print(result, cnt // 2)
    ans = min(ans, cnt // 2)
print(ans)
profile
안녕하세요!

0개의 댓글