728x90


어떻게 문제를 풀 것인가?
-> 문자열에 포함된 IOI의 갯수를 모두 count하면 그것이 N이다
P1 : IOI
P2: IOIOI
N의 값을 입력받아 전체 제공되는 문자열에 P(N) 값을 찾아주면 된다.
-> 근데 어떻게 효율적으로 찾을 수 있을까??
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Baek5525 {
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 s = br.readLine();
int cnt = 0;
int answer = 0;
for (int i = 1; i < m - 1; i++) {
if (s.charAt(i - 1) == 'I' && s.charAt(i) == 'O' && s.charAt(i + 1) == 'I') {
cnt++;
if(cnt==n){
cnt--;
answer++;
}
i++;
}else{
cnt=0;
}
}
System.out.println(answer);
}
}
//IOIOIOI
소스코드를 보고 이해하면 가장 좋겠지만, 솔직히 본인도 이해하는데 오래 걸렸다. 하지만 핵심을 항상 기억하면서 코드를 작성하자
for문을 한번 순회하면서 입력으로 제공된 pN을 찾을 수 있다면 가장 효율적이지 않겠나? O(N)의 시간복잡도를 가질 수 있다.
'알고리즘' 카테고리의 다른 글
| [프로그래머스] 덧칠하기 (1) | 2024.01.09 |
|---|---|
| [프로그래머스] 공원산책 (java) (1) | 2024.01.09 |
| [프로그래머스] 디스크 컨트롤러 (java) (2) | 2024.01.08 |
| [프로그래머스] PCCE 기출 9번(java) (1) | 2024.01.03 |
| 백준 1753번 최단경로 (0) | 2023.12.29 |