본문 바로가기

CodingTEST

[백준 5525] IOIOI (JAVA)

반응형

백준 5525번 문제 - IOIOI

 

5525번: IOIOI

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이 몇

www.acmicpc.net


문제 분석 

 

 

  • I와 O로 이루어진 문자열이 입력된 문자열에 몇개 존재하는지 출력해라.

해결 포인트

 

 

  • 1번 방법 (50점)
    • N이 주어졌을 때 구해지는 문자열(s)을 제작 후, 0번 인덱스부터 M까지 s인덱스만큼 문자열을 잘라서 확인한다.
    • 동일 할 경우, result 증가
  • 2번 방법 (100점 : 인터넷 참고)
    • 연속된 세가지 문자를 비교해서 IOI 문자일 경우, count를 증가하고 count를 판단한다.  (IOI 문자가 아닐 경우 count 초기화)
    • count가 N과 동일할 경우 result 증가, count 감소 (연속 하나 사라지므로)

 


코드

 

import java.awt.*;
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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        int M = Integer.parseInt(br.readLine());

        char [] s = br.readLine().toCharArray();
        
        int result = 0;
        int count = 0;
        for (int i = 1; i < M-1; i++) {
            if(s[i-1] == 'I' && s[i] == 'O' &&  s[i+1] == 'I') {
                count++;
                if(count == N) {
                    count--;
                    result++;
                }
                i++;
            }
            else {
                count = 0;
            }
        }

        bw.write(result + "\n");
        bw.flush();
        bw.close();
    }
}
반응형