1. ๋ฌธ์ ์ค๋ช
2. ์ ๊ทผ ๋ฐฉ์
KEY WORD
: Sliding Window
, ๋๋จธ์ง ์ฐ์ฐ
์์ด๋์ด๋ฅผ ๋ ์ฌ๋ฆฌ๊ธฐ๊ฐ ์ด๋ ค์์ ๋ค๋ฅธ ์ฌ๋์ ํ์ด ๋ธ๋ก๊ทธ์์ ์์ด๋์ด ๋ถ๋ถ๊น์ง๋ง ๋ดค๋ค.
๋๋ a์ b๋ฅผ ์ผ์ผํ ๊ตํํ๋๋ฐ๋ง ์ง์คํ๊ณ ์์๋๋ฐ, ์์ ํ ์๋ชป๋ ์ ๊ทผ ๋ฐฉ์์ด์๋ค. ๊ทธ๋ฌํ ๋ฐฉ์์ผ๋ก ํ์์ ๋, ์ต์๊ฐ์ ์ด๋ป๊ฒ ์ฐพ์ ์ ์์์ง ๊ฐ์ด ์์จ๋ค.
๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฌธ์์ด ๋ด์ a์ ๊ฐ์๋ฅผ ์ธ๊ณ , ๊ทธ ๊ฐ์๋ฅผ ์ฉ๋์ผ๋ก ํ๋
Sliding window
๋ฅผ ๋ง๋ ๋ค. - ๋ฌธ์์ด์ ์ฒ์๋ถํฐ, 1๋ฒ์์ ์ผ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ์ฉ๋๋งํผ a์ b์ ๊ฐ์๋ฅผ ์ผ๋ค.
b์ ๊ฐ์
==๊ตํ์ด ์ผ์ด๋๋ ํ์
์ด๋ค. ํ์ฌ a์ ๊ฐ์๋งํผ์ฉ ๋ฐฐ์ด์ ํ์ธํ๊ณ ์๊ณ , ๊ฑฐ๊ธฐ์ b์ ๊ฐ์๋ฅผ ์ ๋ถ a๋ก ๋๋ฆฐ๋ค๋ฉด, ์ฐ์๋ a์ ์ฐ์๋ b๊ฐ ๋ง๋ค์ด์ง๋ค. ๋ฐ๋ผ์b๋ฅผ ๊ตํํ๋ ํ์๊ฐ ๊ฐ์ฅ ์ ์ ๊ฒฝ์ฐ
๋ฅผ ์ฐพ์์ ๊ทธ๊ฒ์ ์ซ์๋ฅผ ์ธ๋ฉด, ๋ต์ด ๋๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int cntA = 0;
int [] cnts = new int [2]; // 0 -> a, b -> 1
// a๊ฐ ๋ช๊ฐ์ธ์ง ์นด์ดํธ
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == 'a') cntA++;
}
// ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์ด๊ธฐํ
for (int i = 0; i < cntA; i++) {
if(s.charAt(i) == 'a') cnts[0]++;
else if (s.charAt(i) == 'b') cnts[1]++;
}
if(cnts[0] == cntA) {
System.out.println(0);
return;
}
int min_change = Integer.MAX_VALUE;
for (int i = cntA; i < s.length()*2; i++) {
int start = (i - cntA)%(s.length());
int end = i%(s.length());
// ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ์ด๋ํ๋ฉฐ, a์ b์ ๊ฐ์ ๊ฐฑ์
if(s.charAt(start) == 'a') cnts[0]--;
else cnts[1]--;
if(s.charAt(end) == 'a') cnts[0]++;
else cnts[1]++;
// ์ต์๊ฐ ๊ฐฑ์
min_change = Math.min(min_change, cnts[1]);
}
System.out.println(min_change);
}
}
4. ์ฑ์ฅํ๊ธฐ
ํด๋น ๋ฌธ์์ด์ ์์๊ณผ ๋์ด ๋ง๋ถ์ด ์๋ ์ํ์ ํํ์ด๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด์ ๋๋ถ๋ถ => ์์๋ถ๋ถ ๊น์ง์ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ๊ณ์ฐํด์ผ ํ๋ค. ๋ฐ๋ผ์ ๋ ๊ฐ์ง๋ฅผ ์ ๊ฒฝ ์จ์ผ ํ๋ค.
- Loop์ ๊ธธ์ด -> ๋จ์ํ๊ฒ ๋ฌธ์์ด์ ์ ํ์ ์ผ๋ก ์ ๊ฒฝ์จ์๋ ์๋๋ค. ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๊ธฐ์ค ํ ๋ฐํด๊ฐ ๋๋๋ก Loop์ ์ด๋์ ์ ํด์ผ ํ๋ค. ์ฌ๊ธฐ์๋
Sliding window์ ๊ธธ์ด
+๋ฐฐ์ด์ ๊ธธ์ด
๊ฐ ๋ ๊ฒ์ด๋ค. (์์ ์ฝ๋์์๋ ์ด๋ฐ ๊ฒ๋ค ์ ๋ฐ์ง๊ณ๋ฐฐ์ด์ ๊ธธ์ด
*2๋ฅผ ํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋ค.) - 1๋ฒ์ฒ๋ผ Loop์ ๊ธธ์ด๋ฅผ ์ ํ๋ฉด, ์๋ ๋ฌธ์์ด ๊ธธ์ด๊ฐ 15์์ ์, for๋ฌธ์ i๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ด 16,17... ์ด ๋ ์ง ๋ชจ๋ฅธ๋ค. ์ด๋ ๊ฒ ๋๋ฉด, s.charAt(i)๊ฐ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฒ์ด๋๋ค! ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ๋๊ฐ?
i%(๋ฌธ์์ด์ ๊ธธ์ด)๋ฅผ ํ๋ฉด ๋๋ค. ์์์ ์์๋ก ๋ค์๋ฏ์ด, ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 15๋ผ๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด 15%15 == 0์์ผ๋ก, 16,17 ... ๋ก ๋์๊ฐ์๋ก ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ๋ค์ ์์ํ ์ ์๋ค.
0