[Algorithm - Baekjoon] 1522번 문자열 교환

nunu·2023년 10월 5일
0

Algorithm

목록 보기
95/142

문제

a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오.

이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 있는 것이다.

예를 들어, aabbaaabaaba이 주어졌을 때, 2번의 교환이면 a를 모두 연속으로 만들 수 있다.

입력

첫째 줄에 문자열이 주어진다. 문자열의 길이는 최대 1,000이다.

출력

첫째 줄에 필요한 교환의 회수의 최솟값을 출력한다.

예제1 - 입력

abababababababa

예제1 - 출력

3

예제2 - 입력

ba

예제2 - 출력

0

예제3 - 입력

aaaabbbbba

예제3 - 출력

0

예제4 - 입력

abab

예제4 - 출력

1

예제5 - 입력

aabbaaabaaba

예제5 - 출력

2

예제6 - 입력

aaaa

예제5 - 출력

0

제출 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] input = br.readLine().toCharArray();
        int cntA = 0;
        for (int i = 0; i < input.length; i++) {
            if (input[i] == 'a')
                cntA++;
        }

        int answer = cntA + 1;
        int l = input.length;
        for (int i = 0; i < l; i++) {
            int temp = 0;
            for (int j = 0; j < cntA; j++) {
                if (input[(i + j) % l] == 'b')
                    temp++;
            }
            answer = Math.min(answer, temp);
        }
        System.out.println(answer);
    }
}
profile
Hello, I'm nunu

0개의 댓글