문제
여덟 자리의 양의 정수가 주어질 때, 그 안에서 연속하여 같은 숫자가 나오는 것이 없으면 1을 출력하고, 있으면 같은 숫자가 연속해서 나오는 구간 중 가장 긴 것의 길이를 출력하는 프로그램을 작성하라.
예를 들어 세 개의 숫자 12345123, 17772345, 22233331이 주어졌다고 하자. 12345123은 연속하여 같은 숫자가 나오는 것이 없으므로 1을 출력하고, 17772345는 7이 세 개 연속하여 나오므로 3을 출력하며, 22233331의 경우에는 2가 세 개, 3이 네 개 연속해서 나오므로 그 중 큰 값인 4를 출력하여야 한다.
입력
첫째 줄부터 셋째 줄까지 각 줄에 하나씩 세 개의 여덟 자리 양의 정수가 주어진다.
출력
첫째 줄에서 셋째 줄까지 한 줄에 하나씩 각 입력된 수 내에서 같은 숫자가 연속하여 나오는 가장 긴 길이를 입력 순서대로 출력한다.
출처
Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2009 > 중등부 1번
Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2009 > 고등부 1번
- 데이터를 추가한 사람: martinok1103
알고리즘 분류
굉장히 간단한 문제이다.
같은 수가 연속으로 등장해서 나오면 이를 카운트해서 최댓값으로 저장해 놓고
다른 수가 등장하면 이 카운트 값을 다시 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);
}
}
사실 이 문제가 까다로운 점은
숫자라고 해서 정수형 타입으로 선언해 문제를 풀면 틀릴 수 있다.
위 처럼 문자열로 받아 계산하는 것이 훨씬 간편하고 쉽다.
문제의 형태에 따라서 어떤 변수형을 선언해야 될 지는 반드시 공부가 필요한 부분이다.
이상입니다!