Step-by-Step
[Java] 백준 1522 - 문자열 교환 본문
https://www.acmicpc.net/problem/1522
투포인터 사용하는 문제이다.
처음에는 연속된 b값이 가장 많은 것을 기준으로 옆에 붙이려고 했는데,
bababa 이런 경우는 맨 앞의 b를 두번째 b와 세번째 b사이에 넣는 작업 한 번만 해주면 연속적이게 된다.
※ 방법
a의 개수를 구한 후, 연속적인 a 범위 내에서 내부에 있는 b의 개수가 최소인 경우를 구하면 된다.
0~aCnt / 1~(aCnt+1) / .. → 이런식으로 투 포인터 사용
코드
package BOJ_1000;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class boj1522 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] str = br.readLine().split("");
int aCnt = 0, strlen = str.length;
for(String s : str) {
if(s.equals("a"))
aCnt++;
}
if(aCnt >= strlen-1) {
bw.write("0");
bw.flush();
bw.close();
return ;
}
int minCnt = Integer.MAX_VALUE;
// 시작점
for(int i=0; i<strlen; i++) {
int bCnt = 0;
// 범위
for(int j=0; j<aCnt; j++) {
int idx = (i+j)%strlen;
if(str[idx].equals("b")) {
bCnt++;
}
}
minCnt = Math.min(minCnt, bCnt);
}
bw.write(minCnt+"");
bw.flush();
bw.close();
}
}
'언어 > JAVA' 카테고리의 다른 글
[Java] 백준15989 - 1,2,3 더하기 4 (0) | 2022.12.01 |
---|---|
[Java] 백준 2206 - 벽 부수고 이동하기 (0) | 2022.11.27 |
[Java] 백준7579 - 앱 (0) | 2022.11.14 |
[Java] 프로그래머스 - 베스트앨범 (+Comparable 사용) (0) | 2022.11.13 |
Comparable & Comparator 사용하기 (0) | 2022.11.13 |
Comments