728x90
반응형

문제

17288번 : 3개만!

 

17288번: 3개만!

0보다 크거나 같고, 9보다 작거나 같은 숫자로 이루어진 문자열 S에서 연속된 세 숫자가 몇 번 등장하는지 출력하라. 단, 네 숫자 이상이 연속일 경우에는 그 일부를 세지 않는다.

www.acmicpc.net

 

내가 작성한 코드 (C++ 성공)

#include <iostream>
#include <string.h>

using namespace std;

int main(){
	char s[101];
	cin >> s;
	
	string ans = "";
	ans += s[0];
	
	int cnt = 0;
	
	for(int i=1; i<=strlen(s); i++){
		if(s[i-1] == s[i]-1){
			ans += s[i];
		} else {
			if(ans.size() == 3) cnt++;
			ans = "";	
			ans += s[i];
		}
	}
	
	cout << cnt;
	
	return 0;
}

 

정리

딱 연속된 3자리의 숫자가 있을 경우의 횟수를 출력하는 문제였다.
이 문제를 보자마자 문자와 문자열의 크기를 이용해서 풀면 되겠구나 생각이 들었다.
그래서 문자를 입력받았고 숫자의 갯수를 구분하기 위한 빈 문자열 하나를 만들어주었다.

입력받은 문자의 길이만큼 반복하는데 이전의 숫자가 현재의 숫자 - 1 이면 문자열에 문자를 더해준다.
만약 숫자가 연속된다면 계속해서 문자열에 넣어주고 연속하지 않는 숫자가 나오게 되면
문자열의 크기가 3인지 아닌지 확인 후에 갯수를 세어준다.
그리고 문자열을 다시 빈 문자열로 만들어준 후에 다시 반복한다.

728x90
반응형
복사했습니다!