๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 5525 IOIOI

by ๐ŸŠ๊ทค๐ŸŠ 2024. 8. 24.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/5525

  • N+1๊ฐœ์˜ I์™€ N๊ฐœ์˜ O๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉด, I์™€ O์ด ๊ต๋Œ€๋กœ ๋‚˜์˜ค๋Š” ๋ฌธ์ž์—ด์„ PN์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • P1 IOI
    • P2 IOIOI
    • P3 IOIOIOI
    • PN IOIOI...OI (O๊ฐ€ N๊ฐœ)
  • I์™€ O๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด S์™€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, S์•ˆ์— PN์ด ๋ช‡ ๊ตฐ๋ฐ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” S์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง€๋ฉฐ, ์…‹์งธ ์ค„์— S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • S์— PN์ด ๋ช‡ ๊ตฐ๋ฐ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • IOI ํŒจํ„ด์ด ๋ช‡๊ฐœ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ๊ทธ ๊ฐœ์ˆ˜์™€ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๊ฒฐ๊ณผ๊ฐ’์„ ์นด์šดํŠธํ•ด์ค€๋‹ค.
  • ๋ฐ˜๋ณต ๋ฒ”์œ„๋Š” 1๋ถ€ํ„ฐ M - 2๊นŒ์ง€ ํ•˜๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” i-1, i, i+1๋ฒˆ์งธ ๊ฐ’์ด IOI์ธ์ง€ ํŒ๋‹จํ•ด์•ผ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํžˆ ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์–ผ๋งˆ์ธ์ง€ ๋ณด๊ณ  ์ง์ ‘ IOIํŒจํ„ด์„ ๋งŒ๋“ค์–ด์คฌ๋‹ค
  • ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์ค€ ๋ฌธ์ž์—ด์„ IOIํŒจํ„ด ๊ธธ์ด๋งŒํผ subString์„ ํ†ตํ•ด ์ž˜๋ผ์ค˜์„œ IOIํŒจํ„ด์ด๋ž‘ ๊ฐ™์€์ง€ ๋น„๊ตํ–ˆ๋‹ค.
  • ๋งŒ์•ฝ ๊ฐ™๋‹ค๋ฉด ์นด์šดํŠธ๋ฅผ ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ํ–ˆ๋Š”๋ฐ 50์ ์„ ๋ฐ›์•˜๋‹ค...
  • ์•Œ๊ณ ๋ณด๋‹ˆ ๋ฌธ์ž์—ด์„ ์ง์ ‘ ๋”ํ•ด์ค˜์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๊ณ  ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ค์„œ ์‹œ๊ฐ„์ดˆ๊ณผ ๋•Œ๋ฌธ์— 50์ ์ธ ๊ฒƒ ๊ฐ™์•˜๋‹ค.
  • ๊ทธ๋ž˜์„œ ์‹œ๊ฐ„์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์œ„ํ•ด์„œ ๊ณ ๋ฏผ์„ ์ข€ ๋งŽ์ด ํ–ˆ๋‹ค....

๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ์กฐ์‹ฌํ•˜์ž..!!

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ5525 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด
        int N = Integer.parseInt(br.readLine());
        // ๋ฌธ์ž์—ด ๊ธธ์ด
        int M = Integer.parseInt(br.readLine());
        // ๋น„๊ตํ•  ๊ธฐ์ค€ ๋ฌธ์ž์—ด
        String S = br.readLine();

        // IOI ๊ฐœ์ˆ˜ ์นด์šดํŠธ
        int cnt = 0;
        // ๊ฒฐ๊ณผ๊ฐ’
        int result = 0;

        // i-1, i, i+1๋ฒˆ์งธ ๊ฐ’์ด IOI์ธ์ง€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ
        for(int i = 1; i < M - 1; i++){
            // i - 1๋ฒˆ์งธ๊ฐ€ I๊ณ  i๋ฒˆ์งธ๊ฐ€ O, i + 1๋ฒˆ์งธ๊ฐ€ I๋ผ๋ฉด
            if((S.charAt(i - 1) == 'I') && (S.charAt(i) == 'O') && (S.charAt(i + 1) == 'I')){
                // IOI ๊ฐœ์ˆ˜ ์นด์šดํŠธ + 1
                cnt = cnt + 1;
                // ๋‹ค์Œ IOI ํŒจํ„ด์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ i๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ด
                // ์›๋ž˜๋Š” i++ ๋˜๋ฉด์„œ IOIํŒจํ„ด์—์„œ i-1, i, i+1๋ฒˆ์งธ๊ฐ€ OIO๊ฐ€ ๋˜๋ฏ€๋กœ
                // ํ•œ๋ฒˆ ๋” ์ฆ๊ฐ€์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ
                i = i + 1;

                // ๋งŒ์•ฝ ์ฐพ์€ IOIํŒจํ„ด์ด ์ฐพ์•„์•ผ๋˜๋Š” IOIํŒจํ„ด ๊ธธ์ด์™€ ๊ฐ™๋‹ค๋ฉด
                if(cnt == N){
                    // ๊ฒฐ๊ณผ๊ฐ’ + 1ํ•˜๊ณ 
                    result = result + 1;
                    // IOIํŒจํ„ด ์นด์šดํŠธ ํ•œ๊ฐœ๋ฅผ ๋นผ์คŒ
                    cnt = cnt - 1;
                }
            }
            // ๋งŒ์•ฝ i-1, i, i+1์ด IOIํŒจํ„ด์ด ์•„๋‹ˆ๋ผ๋ฉด
            else{
                // IOIํŒจํ„ด ๊ฐœ์ˆ˜๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚ด
                cnt = 0;
            }
        }

        System.out.println(result);
    }
}