코드 설명
입력받은 숫자를 1자리에서 최대 3자리까지만 자른다.
수를 1자리씩 자르며 나오는 값은, checkArr[ 값 ] = 1 (초기에는 0으로 초기화되어 있음) 로 변경하여 나왔음을 체크한다.
그 다음 2자리, 3자리씩 자르며 마찬가지로 나오는 값을 checkArr[ 값 ] = 1 로 저장하여 나온 값을 체크한다.
1, 2, 3자리 모두 체크를 끝낸 후 checkArr 배열을 차례대로 순차 순회하며 0이 저장되어 있는 가장 작은 인덱스를 찾는다. ( = 나오지 않은 가장 작은 수)
#include <stdio.h>
#include <math.h>
#include <string.h>
#define MAX 1000
int arr[MAX] = { 0, };
int checkArr[MAX] = { 0, };
int ans = 0;
void Answer(){
for (int i = 0; i < MAX; i++){
if (checkArr[i] == 0){
ans = i;
break;
}
}
}
void init(int* N){
*N = 0;
memset(arr, 0, sizeof(arr));
memset(checkArr, 0, sizeof(checkArr));
ans = 0;
}
int main(void)
{
int N = 0;
int T = 0;
scanf(" %d", &T);
for (int i = 1; i <= T; i++){
init(&N);
scanf(" %d", &N);
for (int j = 0; j < N; j++)
scanf(" %d", &arr[j]);
//0~999까지 숫자만 검사한다.
for (int n = 1; n <= 3; n++){
for (int i = 0; i < (N - n + 1); i++){
int sum = 0;
for (int k = 0; k < n; k++){
sum += arr[i + k] * pow(10.0,(n-k-1));
}
checkArr[sum] = 1;
}
}
Answer();
printf("#%d %d\n", i, ans);
}
return 0;
}
'이것저것' 카테고리의 다른 글
SW 4047 영준이의 카드 카운팅 D3 (C++) (0) | 2018.03.29 |
---|---|
SW 2814 최장 경로 [D3] (0) | 2018.03.27 |
모의 SW 등산로 조성 소스 (0) | 2018.03.24 |
SW 1226번 1227번 미로1, 2 [D4] (0) | 2018.03.23 |
동적계획법 (0) | 2018.03.22 |
댓글