BOJ_S1_5525
๐ [S1_5525] IOIOI
- ์ฒซ ๊ตฌํ - ์๊ฐ์ด๊ณผ 50์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// **** input start ****
int N = Integer.parseInt(br.readLine());
int S = Integer.parseInt(br.readLine());
String str = br.readLine();
// **** input end ****
String P = "";
// Pn ๊ตฌํ๊ธฐ
for (int i = 0; i < (N * 2 + 1); i++) {
if (i % 2 == 0) {
P += "I";
} else {
P += "O";
}
}
// ์ด ํ์
int cnt = 0;
for (int i = 0; i < S - (N * 2); i++) {
if (str.charAt(i) == 'I') {
if(str.substring(i, i+N*2+1).equals(P)) {
cnt++;
};
}
}
System.out.println(cnt);
}
}
- dp๋ก ๊ตฌํ - 100์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// **** input start ****
int N = Integer.parseInt(br.readLine());
int S = Integer.parseInt(br.readLine());
String str = br.readLine();
// **** input end ****
char[] ch = str.toCharArray();
int[] dp = new int[S];
// ์ด ํ์
int cnt = 0;
// dp ๋ฐฐ์ด ๊ตฌํ๊ธฐ
for(int i=1; i<S-1; i++) {
// "OI"๊ฐ์ด ์์ผ๋ฉด ์ dp ๊ฐ์์ +1
if(ch[i] == 'O' && ch[i+1] == 'I') {
// "OI" ๊ฐ ์ธํธ์ด๊ธฐ ๋๋ฌธ์ i-1๋ฒ์งธ ๊ฐ์์ ๋ํ๋ค
dp[i+1] = dp[i-1] + 1;
}
// "OI"๊ฐ N๋ฒ ์ด์ ๋ฐ๋ณต ํ๊ณ ์ฒ์ ์์ํ๋ ๊ฐ์ด "I"๋ฉด ์นด์ดํ
if(dp[i+1] >= N && ch[i-(N*2)+1] == 'I') {
cnt++;
}
}
System.out.println(cnt);
}
}
๐ค ๋์ ์๊ฐ
String ๊ฐ์์ Pn์ ๊ตฌํด ๋ช ๋ฒ ๋์ค๋์ง ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ์ดํดํ ๋ค String.substring์ผ๋ก ๊ธธ์ด๋งํผ ์๋ผ ํ์ธํด ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ์ ํ๋๋ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ด๋ค..
์ด์ค for๋ฌธ์ ๋๋ฆฌ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ๊ฑฐ๋ผ๊ณ ์์์ ํ์ง๋ง ๊ฐ์ง์น๊ธฐ๋ฅผ ํด์ ๊ด์ฐฎ์ ์ค ์์๋๋ฐ โฆ ใ
๊ทธ๋์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ dpํ์์ผ๋ก ํธ๋ ๊ฒ์ด์๋ค..
์์ ์ฒ์์ ๋ด๊ฐ ๊ตฌํํ string๋ฉ์๋๋ฅผ ํ์ฉํ๊ณ ๋ฐ์๋ dp๋ก ํ์ด์ค ๊ฒ์ด๋ค.
dp๋ ์ด๋ ค์ ใ
์ฒซ ๋ฒ์งธ ํ
์ผ๋ฅผ ์ด์ฉํด์ ์ค๋ช
์ ํด๋ณด๊ฒ ๋ค.
- ์ ๋ ฅ๋ฐ์ string ๊ฐ์ ch[] ๋ฐฐ์ด๋ก ์์ฑ
- ๋จผ์ dp[] ๋ฐฐ์ด์ ์์ฑํด์ค๋ค
- i ๋ฒ์งธ โOโ, i+1 ๋ฒ์งธ โIโ
- โOIโ์ธํธ๊ฐ 2์นธ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์
dp[i+1] = dp[i-1]+1
- dp[] ๋ฐฐ์ด์ ์์ฑํด์ค๋ค์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์นด์ดํ
์ ํด์ค๋ค
- ์นด์ดํ
์ ํด์ฃผ๊ธฐ ์ํด์ โIOIโ๊ฐ ์์ฑ๋์ด์ผ ํ๋ฏ๋ก ์ฒ์ ๊ฐ์ด โIโ์ธ์ง ํ์ธ
ch[i-(N*2)+1] == "I"
- ๊ทธ๋ฆฌ๊ณ โOIโ๊ฐ N๋ฒ ๋ฐ๋ณต๋๋์ง ์ฒดํฌ ( Pn์ด ๋์ด์ผ ํ๋ฏ๋ก )
- ์นด์ดํ
์ ํด์ฃผ๊ธฐ ์ํด์ โIOIโ๊ฐ ์์ฑ๋์ด์ผ ํ๋ฏ๋ก ์ฒ์ ๊ฐ์ด โIโ์ธ์ง ํ์ธ