잘짠 코드는 아닌것같다.
최대 1000개의 숫자를 입력받으므로 0 1 2 3 4 5 6 7 8 9 1 0 1 1 ... 이렇게 하나씩 입력받는다고해도 1000 이하의 숫자 중에서 반드시 최소 숫자가 발생한다.
n개의 입력에 대해서 0 ~ 9 까지 개수를 하나씩 증가 시킨 후,
없는 숫자가 있으면 출력하고 종료.
그다음엔 2개씩 끊어서 숫자를 만든 다음 ans배열에 개수를 하나씩 증가 시킨후
없는 숫자가 있으면 출력하고 종료.
마찬가지로 3개씩 끊어서 숫자를 만든 다음 ans배열에 개수를 하나씩 증가 시킨 후
없는 숫자가 있으면 출력하고 종료한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <stdio.h> int ans[1001] = { 0, }; int main(void) { int test_case; scanf("%d", &test_case); for (int z = 1; z<= test_case; z++) { int n; scanf("%d", &n); int data[1001] = { 0, }; for (int i = 0; i < 1000; i++) ans[i] = 0; for (int i = 0; i < n; i++) scanf("%d", &data[i]); int check = 1; for (int i = 1; i < 4; i++) {//3자리 if (i == 1) { for (int j = 0; j < n; j++) { ans[data[j]]++; } } else if (i == 2) { int temp = 0; for (int j = 0; j < n - 1; j++) { temp = data[j] * 10 + data[j + 1]; ans[temp]++; } } else { int temp = 0; for (int j = 0; j < n - 2; j++) { temp = data[j] * 100 + data[j+1] * 10 + data[j + 2]; ans[temp]++; } } check *= 10; for (int j = 0; j < check; j++) { if (ans[j] == 0) { printf("#%d %d\n", z, j); i = 10; break; } } } } return 0; } | cs |