5525번: IOIOI
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이 몇
www.acmicpc.net
✏️ 풀이
처음에는 파이썬을 활용해서 슬라이싱윈도우를 통해서 일정 구간을 잘라 일치하는지 풀었다. 하지만 그렇게 풀어서 채점을 하니 50점밖에 나올 수 없었다. 그래서 고민을 했는데 도저히 모르겠어서 아이디어를 구했다.
반복문을 통해서 "IOI"패턴을 체크하는 방법이다. 처음에 IOI를 체크하고 그 다음 패턴들도 확인을 했다. 패턴의 갯수가 처음 입력한 N과 동일할 시에 cnt를 높혔다. 그리고 idx를 2씩 증가하여 I로 시작할 수 있게 만들었다. 이런 방식을 통해서 문자열내의 같은 패턴을 찾아내는 방식이다.
💻 코드
#include <iostream>
#include <string>
using namespace std;
int main(void){
int n, s_len;
string s;
cin >> n >> s_len >> s;
int count = 0, pattern = 0, idx = 0;
while(idx < s_len-2){
if(s[idx] == 'I' && s[idx+1] == 'O' && s[idx+2] == 'I'){
pattern++;
if(pattern == n){
count++;
pattern--;
}
idx++;
}else{
pattern = 0;
}
idx++;
}
cout << count << endl;
}
'PS > 백준' 카테고리의 다른 글
[백준] 2589 - 보물섬 (0) | 2024.04.13 |
---|---|
[백준] 5430 - AC (2) | 2024.01.11 |
[백준] 25418 - 정수 a를 k로 만들기 (1) | 2024.01.11 |
[백준] 2583 - 영역 구하기 (0) | 2024.01.11 |
실버2 색종이 만들기(2630) (1) | 2024.01.01 |