꾸물꾸물 졔의 개발공부
[백준] 1522 문자열 교환 본문
https://www.acmicpc.net/problem/1522
1522번: 문자열 교환
a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해
www.acmicpc.net
[풀이]
- 주어진 문자열 내의 a 갯수가 a_cnt 개 일 때,
- 입력받은 문자열중 a_cnt 개의 문자들을 연속으로 탐색했을 때 모두 a여야 한다.
- 단, 원형으로 이루어져 있기 때문에 마지막 문자가 시작점일때까지 모두! 탐색
💡예제 입력
aabbaaabaaba : a의 갯수 8개
> 0번 인덱스 부터 a의 갯수만큼 탐색하면서, 해당 탐색문자열에 포함된 b의 갯수가 교환해야 하는 갯수
aabbaaabaaba : b가 3개, 교환 횟수 3번
aabbaaabaaba : 교환 횟수 3번
aabbaaabaaba : 교환 횟수 3번
aabbaaabaaba : 교환 횟수 3번
aabbaaabaaba : 교환 횟수 2번
이후 탐색 aabbaaabaaba , aabbaaabaaba ... aabbaaabaaba
[소스코드]
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int min = Integer.MAX_VALUE;
String s= br.readLine();
int a_cnt =0; //a의 갯수
for(int i=0; i<s.length(); i++) {
if(s.charAt(i) == 'a') a_cnt ++;
}
for(int i=0; i<s.length(); i++) { //원형이기때문에 마지막 인덱스까지 탐색
int b_cnt =0;
for(int j=i; j<i+a_cnt; j++) {
if(s.charAt(j%s.length()) =='b') b_cnt ++;
}
min = Math.min(min, b_cnt);
}
System.out.println(min);
}//end of main
}//end of class
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11053 가장 긴 증가하는 부분 수열 (0) | 2023.10.24 |
---|---|
[백준] 20437 문자열 게임 2 - JAVA (0) | 2023.09.25 |
[백준] 18428 감시 피하기 - JAVA (0) | 2023.09.22 |
[백준] 2668 숫자고르기 - JAVA (0) | 2023.09.22 |
[백준] 20055 컨베이어 벨트 위의 로봇 - JAVA (0) | 2023.09.11 |