본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 5525/c++] IOIOI - 문자열 - 탐색 - 부분 점수

by tokkiC 2022. 6. 24.

연산 시간을 줄여서 최소한의 연산으로 문자를 탐색하는 로직을 만드는 문제였다

조건에 부분 만족 시 부분 점수를 주는 서브 테스크 문제로서, 

부분 점수 50점의 조건은 논리에 이상이 없는지, 100점은 일정 시간내에 풀 수 있는지 였다

find를 통해 이전 문자 탐색처럼 코드를 짜니 시간복잡도가 높아 부분점수를 받았고,

' I ' 이후에 오는 문자들이 IO라는 조건에 맞을 시 그 문자들이 n개 이상이 되어 원하는 문자의 길이를

충족하는지를 앞에서 부터 문자를 하나씩 옮겨가며 충족 시 IO의 문자 수 만큼인 2만큼 인덱스를 추가하여

계속 카운트 해나가는 방식으로 풀면 시간내에 풀 수 있는 문제였다

https://www.acmicpc.net/problem/5525

 

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

#include <bits/stdc++.h>
using namespace std;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	int n, m;
	int cnt=0;
	string s;
	
	cin >> n >> m >> s;
	
	for(int i=0; i<m; i++){
		int kt=0;
		if(s[i]=='I'){
			while((s[i+1]=='O') && (s[i+2]=='I')){
				kt++;
				if(kt>=n)
					cnt++;
				i+=2;					
			}			
		}
	}
		
	cout << cnt << "\n";
		
	return 0;
}

댓글