[백준] IOIOI

개발자 P군·2025년 7월 30일

백준

목록 보기
46/57
post-thumbnail

🔗 문제 보기 - [백준] 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이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오.

✍ 입력

첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다.

📄 출력

S에 PN이 몇 군데 포함되어 있는지 출력한다.

✅ 코드

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));  
        int n = Integer.parseInt(br.readLine());  
        int m = Integer.parseInt(br.readLine());  
  
        int totalCount = 0;  
        String line = br.readLine();  
        for(int i = 0; i < line.length() - 2; i++) {  
            if(line.charAt(i) == 'I' && line.charAt(i + 1) == 'O' && line.charAt(i + 2) == 'I') {  
                int count = 0;  
  
                // 현재 위치에서 +2 까지의 요소가 'IOI' 되는 상황일 때  
                while(i + 2 < line.length()  
                        && line.charAt(i) == 'I'  
                        && line.charAt(i + 1) == 'O'  
                        && line.charAt(i + 2) == 'I'  
                ) {  
                    count++;  
  
                    // 'IOI' 갯수가 n과 같거나 크면 출력 값인 totalCount 값 증가  
                    if(count >= n) {  
                        totalCount++;  
                    }  
  
                    // 다음 'I' 값으로 이동  
                    i += 2;  
                }  
            }  
        }  
  
        System.out.println(totalCount);  
    }  
}

🧩 코드풀이

주어진 문자열에서 IOI를 찾을 때 마다 count 값을 증가 시켜주고, count 값이 n 이상이 되었을 때 출력할 값인 totalCount 값을 증가시켜줍니다. 그리고 더 빠르게 문제를 해결 하기 위해서 다음 'I'를 찾아서 i 값을 2 증가시켜줍니다.

이 문제를 풀면서 문제를 풀긴 했지만 계속 50점이 나와서 이후 검색을 통해 100점으로 통과했습니다. 속도를 더욱 빠르게 풀기위한 고민을 더 많이 해야겠다는 생각이 들었습니다.

profile
문제를 발견하고 해결하는 과정을 통해 얻은 새로운 지식을 공유하고자 합니다.

0개의 댓글