메모리: 20160 KB, 시간: 236 ms
문자열
2024년 8월 31일 21:27:21
N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다.
IOIIOIOIIOIOIOIIOIOI...OI (O가 N개)I와 O로만 이루어진 문자열 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);
}
}