PS/백준

백준 / 문자열 / 5525번 / IOIOI / JS

KimMinJun 2024. 11. 9. 22:49

문제 간단설명

N+1개의 I와 N개의 O로 이루어져 있으면, I와 O가 교대로 나오는 문자열을 P_N이라고 한다.
I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 P_N이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오.

 

제한 사항

  • 1 <= N <= 1,000,000
  • 2N+1 <= M <= 1,000,000
  • S는 I와 O로만 이루어져 있다.

 

성공 코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
// const filePath = process.platform === 'linux' ? '/dev/stdin' : 'BOJ/input.txt';
const input = fs
  .readFileSync(filePath)
  .toString()
  .trim()
  .split('\n')
  .map((el) => el.trim());

const N = +input.shift();
const M = +input.shift();
const S = input.shift();

function solution() {
    let count = 0;                // 'IOI' 패턴을 찾은 횟수
    let result = 0;               // 원하는 패턴을 찾은 횟수
    let i = 0;
    
    while (i < M - 1) {
      if (S[i] === 'I' && S.slice(i, i + 3) === 'IOI') {  // 'IOI' 패턴 찾기
        count += 1;               // 'IOI' 패턴이 연속되는 수를 세기
        if (count >= N) {
          result += 1;            // 'IOI'가 N번 이상 연속되면 패턴을 찾은 것으로 간주
        }
        i += 2;                   // 'IOI' 패턴을 찾으면 두 칸 이동
      } else {
        count = 0;                // 패턴이 끊기면 count 초기화
        i += 1;
      }
    }
    
    console.log(result);
}

solution();