CT/백준

[백준][JAVA] 문자열 교환

hyunji1109 2025. 1. 5. 00:54

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

 

문제

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

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

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

 

입력

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

 

출력

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

 


 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int n = s.length();
        int acount = 0;
        for (int i = 0; i < n; i++) {
            if (s.charAt(i) == 'a') acount++;
        }
        int minbcount = Integer.MAX_VALUE;
        for (int start = 0; start < n; start++) {
            int bcount = 0;
            for (int i = 0; i < aCount; i++) {
                int index = (start + i) % n;
                if (s.charAt(index) == 'b') bcount++;
            }
            if (bCount < minbcount) minbCount = bcount;
        }
        System.out.println(minbcount);
    }
}

 

  • for문 사용해 'a'가 나오면 acount 개수 증가
  • 시작점을 0부터 끝까지 하나씩 이동
  • 각 구간에서 포함된 'b'의 개수 셈
  • 시작점에서부터 a 개수만큼의 범위 확인
  • 만약 해당 문자가 'b'라면 bcount 증가
  • 각 시작점마다 계산된 'b' 개수 비교해 최소값 업데이트