[Silver I] IOIOI - 5525

JYC·2024년 8월 31일

[BAEKJOON]

목록 보기
95/102

문제 링크

성능 요약

메모리: 20160 KB, 시간: 236 ms

분류

문자열

제출 일자

2024년 8월 31일 21:27:21

문제 설명

N+1개의 I와 N개의 O로 이루어져 있으면, IO이 교대로 나오는 문자열을 PN이라고 한다.

  • P1 IOI
  • P2 IOIOI
  • P3 IOIOIOI
  • PN IOIOI...OI (O가 N개)

IO로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오.

입력

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

출력

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

풀이

조금 디테일하게 생각해야 하는 문제이다.

필자같은 경우엔 런타임 에러 (StringIndexOutOfBounds) 가 많이 나와 당황했던 문제이기도 하다.

위 에러처럼 문자열 범위를 넘어가지 않도록 하는 것이 중요한 문제이다.


로직 자체는 if문으로 IOI를 찾아나간다고 보면 된다.
IOI를 하나 찾을 때마다 카운트해주며 PN이 되면 정답 +1 을 해주고 카운트에서 1을 빼주면 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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());
		String str = br.readLine();

		int ans=0;
		int count=0;
		
		for(int i=1; i<m-1; i++) {
			if(str.charAt(i-1)=='I' && str.charAt(i)=='O' && str.charAt(i+1)=='I') {
				count++;
				
				if(count == n) {
					count--;
					ans++;
				}
				i++;
			}
			else {
				count=0;
			}
		}
		
		System.out.println(ans);
	}
}
profile
열심히 하기 1일차

0개의 댓글