본문 바로가기

# 프로그래밍 개발/04. 알고리즘 문제풀이

백준 알고리즘 2495번 [연속구간] 문제 풀이 코드 공개

반응형

문제

여덟 자리의 양의 정수가 주어질 때, 그 안에서 연속하여 같은 숫자가 나오는 것이 없으면 1을 출력하고, 있으면 같은 숫자가 연속해서 나오는 구간 중 가장 긴 것의 길이를 출력하는 프로그램을 작성하라. 

예를 들어 세 개의 숫자 12345123, 17772345, 22233331이 주어졌다고 하자. 12345123은 연속하여 같은 숫자가 나오는 것이 없으므로 1을 출력하고, 17772345는 7이 세 개 연속하여 나오므로 3을 출력하며, 22233331의 경우에는 2가 세 개, 3이 네 개 연속해서 나오므로 그 중 큰 값인 4를 출력하여야 한다.  

입력

첫째 줄부터 셋째 줄까지 각 줄에 하나씩 세 개의 여덟 자리 양의 정수가 주어진다.

출력

첫째 줄에서 셋째 줄까지 한 줄에 하나씩 각 입력된  수 내에서 같은 숫자가 연속하여 나오는 가장 긴 길이를 입력 순서대로 출력한다.

알고리즘 분류

 

굉장히 간단한 문제이다. 

같은 수가 연속으로 등장해서 나오면 이를 카운트해서 최댓값으로 저장해 놓고 

다른 수가 등장하면 이 카운트 값을 다시 0으로 되돌린 뒤 

카운트를 하면 된다. 

그리고 마지막 카운트에서 이전에 저장해뒀던 최댓 값과 비교해 

값이 이전의 최댓값보다 클 경우 이를 변경하면 문제가 해결된다.

 

이제 코드를 공개하겠다. 

#include<stdio.h>
#include<string.h>
int main(){
	char a[3][9];
	for(int i = 0 ; i < 3; i++){
		scanf("%s",a[i]);
		int ct = 1;
		int max = 1;
		int len = strlen(a[i]);
		for(int j = 0 ; j < len-1 ; j++){
			if(a[i][j] == a[i][j+1]){
				ct++;
				if(max < ct){
					max = ct;
				}
			}else{
				ct = 1;
			}
		}
		printf("%d\n",max);
	}
}

사실 이 문제가 까다로운 점은 

숫자라고 해서 정수형 타입으로 선언해 문제를 풀면 틀릴 수 있다. 

위 처럼 문자열로 받아 계산하는 것이 훨씬 간편하고 쉽다. 

 

문제의 형태에 따라서 어떤 변수형을 선언해야 될 지는 반드시 공부가 필요한 부분이다. 

이상입니다! 

반응형