N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다.
IOIIOIOIIOIOIOIIOIOI...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점으로 통과했습니다. 속도를 더욱 빠르게 풀기위한 고민을 더 많이 해야겠다는 생각이 들었습니다.