Java

[백준 1522] 문자열 교환 (JAVA)

iheeeee6-6 2023. 4. 28. 08:52
728x90

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

 

1522번: 문자열 교환

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

www.acmicpc.net

 

a의 갯수를 세어서 그 갯수만큼의 범위를 돌면서 b의 최솟값을 찾으면 된다!

 

aaaabbbbba 인 경우에는, a가 5개 이므로 

시작 지점을 0~9(문자열 길이 10) 

범위는 5

1) aaaab -> 1개

2) aaabb -> 2개

3) aabbb -> 3개

4) abbbb -> 4개

5) bbbbb -> 5개

6) bbbba -> 4개

7) bbbaa -> 3개

8) bbaaa -> 2개

9) baaaa -> 1개

9) aaaaa -> 0개

 

 

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

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		char[] arr = br.readLine().toCharArray();
		int aCount=0;
		for(int i=0;i<arr.length;i++) {
			if(arr[i]=='a') aCount++;
		}
		
		int min=Integer.MAX_VALUE;
		for(int i=0;i<arr.length;i++) {
			int bCount=0;
			for(int j=0;j<aCount;j++) {
				int idx=(i+j)%arr.length;
				if(arr[idx]=='b') bCount++; 
			}
			min=Math.min(min, bCount);
		}
		
		System.out.println(min==Integer.MAX_VALUE?0:min);
	}

}

'Java' 카테고리의 다른 글

[백준 4179] 불! (JAVA)  (0) 2023.04.29
[백준 2179] 비슷한 단어 (JAVA)  (0) 2023.04.28
[백준 1976] 여행가자 (JAVA)  (0) 2023.04.27
[백준 24337] 가희와 탑 (JAVA)  (0) 2023.04.27
[백준 1138] 한 줄로 서기 (JAVA)  (0) 2023.04.26