IOIOI 성공서브태스크출처다국어
한국어
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 256 MB | 9727 | 2882 | 2308 | 31.530% |
문제
N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다.
- P1 IOI
- P2 IOIOI
- P3 IOIOIOI
- PN IOIOI...OI (O가 N개)
I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 군데 포함되어 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다.
출력
S에 PN이 몇 군데 포함되어 있는지 출력한다.
제한
- 1 ≤ N ≤ 1,000,000
- 2N+1 ≤ M ≤ 1,000,000
- S는 I와 O로만 이루어져 있다.
서브태스크
번호배점제한
1 | 50 | N ≤ 100, M ≤ 10 000. |
2 | 50 | 추가적인 제약 조건이 없다. |
예제 입력 1 복사
1 13 OOIOIOIOIIOII
예제 출력 1 복사
4
- OOIOIOIOIIOII
- OOIOIOIOIIOII
- OOIOIOIOIIOII
- OOIOIOIOIIOII
예제 입력 2 복사
2 13 OOIOIOIOIIOII
예제 출력 2 복사
2
- OOIOIOIOIIOII
- OOIOIOIOIIOII
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.io.BufferedReader import java.io.BufferedWriter import java.io.InputStreamReader import java.io.OutputStreamWriter import java.util.* val br = BufferedReader(InputStreamReader(System.`in`)) val bw = BufferedWriter(OutputStreamWriter(System.out)) fun main()=with(br){ val n = readLine()!!.toInt() val m = readLine()!!.toInt() val parent = readLine() var pattern = 0 var ans = 0 var i = 0 while(i<m-2){ if(parent[i]=='I' && parent[i+1] == 'O' && parent[i+2] == 'I') { pattern++ if(pattern == n){ pattern-- ans++ } i++ } else{ pattern = 0 } i++ } bw.write("$ans") bw.flush() bw.close() } | cs |
'알고리즘 공부 > KMP 알고리즘' 카테고리의 다른 글
백준 1786번 with Kotlin (0) | 2021.08.14 |
---|---|
KMP 알고리즘 with Kotlin (0) | 2021.08.14 |