본문 바로가기
이것저것

SW 3809 화섭이의 정수 나열 [D3]

by 문자메일 2018. 3. 25.

코드 설명

입력받은 숫자를 1자리에서 최대 3자리까지만 자른다.

수를 1자리씩 자르며 나오는 값은, checkArr[ 값 ] = (초기에는 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

댓글