
-Code
import java.util.*;
public class BOJ1522 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
// 역순도 확인해야 하므로 2배로 길이 늘려 저장
int aCnt = 0;
int length = str.length();
char[] chars = new char[length * 2];
for (int i = 0; i < length; i++) {
char now = str.charAt(i);
aCnt += now == 'a' ? 1 : 0;
chars[i] = now;
chars[i + length] = now;
}
// a의 갯수만큼 뭉쳐야 하므로 해당 범위안에 b의 갯수의 최소값이 정답
int answer = Integer.MAX_VALUE;
for (int i = 0; i < length; i++) {
int bCnt = 0;
for (int j = 0; j < aCnt; j++) {
bCnt += chars[i + j] == 'b' ? 1 : 0;
}
answer = Math.min(answer, bCnt);
}
System.out.println(answer);
sc.close();
}
}
처음에는 2개의 포인터로 양쪽을 변경하며 계산하려 했으나 출력이 이상하게 나왔습니다. 그래서 힌트를 찾아보니 특정 단어의 개수를 새고 그 개수만큼 같은 단어로 채워야 하므로 그 안에 특정 단어가 아닌 다른 단어의 개수의 최소를 구하면 됐습니다. 하지만 추가적으로 끝에서 다시 처음으로 돌아오는 즉 순환되는 부분도 검사를 해야 해서 해당 부분도 수정하여 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 31416번 가상 검증 기술 (0) | 2026.03.06 |
|---|---|
| [백준/Java] 2304번 창고 다각형 (0) | 2026.03.06 |
| [백준/Java] 26577번 Math (0) | 2026.03.05 |
| [백준/Java] 1138번 한 줄로 서기 (0) | 2026.03.05 |
| [백준/Java] 35277번 유림이와 하람이의 두쫀쿠 대작전 (0) | 2026.03.04 |