1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [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์ด ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ )

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: