반응형
🔺 문제
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int min = Integer.MAX_VALUE;
int aCnt = 0;
for(int i = 0 ; i < str.length() ; i++) {
if(str.charAt(i) == 'a')
aCnt++;
}
for(int i = 0 ; i < str.length() ; i++) { // [브루트포스] 0 ~ 마지막 인덱스까지
int bCnt = 0;
for(int j = i ; j < i + aCnt ; j++) { // 🔔 [슬라이딩 윈도우] 해당 인덱스 ~ 그 위치에서 a길이까지
if(str.charAt(j % str.length()) == 'b')
bCnt++;
}
min = Math.min(min, bCnt);
}
System.out.println(min);
}
}
|
cs |
✅ 해결 아이디어
✔ 슬라이딩 윈도우 + 브루트포스
1. 주어진 문자열에서 a의 길이를 센다.
2. "교환 횟수의 최솟값" = b가 있다면, b 갯수를 카운팅하고 이 중 최솟값
0부터 끝 인덱스까지 시작해서,
그 위치에서 a의 길이까지 살펴보며 b 갯수 카운팅
• ababab -> b 1개 교환
• ababab -> b 2개 교환
• ababab -> b 1개 교환
.
.
.
=> 이 중 교환하는 최솟값이 최소 교환 횟수
💥 유의사항
• 문자열 범위를 넘어가면, 다시 0번째부터 살펴볼 수 있게하기 (∵ 문자열이 원형으로 이뤄졌으므로)
💬 느낀 점
와 어떻게 이런 생각을 하지,,?
슬라이딩 윈도우 복습 좀 해야겄다,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 2506번: 점수계산 (0) | 2023.10.06 |
---|---|
[백준/JAVA] 2206번: 벽 부수고 이동하기 (0) | 2023.09.07 |
[백준/JAVA] 16435번: 스네이크버드 (0) | 2023.09.07 |
[백준/JAVA] 16987번: 계란으로 계란치기 (0) | 2023.09.06 |
[백준/JAVA] 1448번: 삼각형 만들기 (0) | 2023.09.05 |