반응형

 

 

백준 5597번은 28개의 입력에서 1 ~ 30번 중 빠진 숫자를 찾는 문제이다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

    int array[31] = { 0, };
    int a;

    for (int i = 0; i < 28; i++) {
        scanf("%d", &a);
        array[a] = 1;
    }

    for (int i = 1; i <= 30; i++) {
        if (!array[i])
        {
            printf("%d \n", i);
        }
    }

    return 0;
}

먼저 Visual Studio에서 scanf를 사용할 때 에러가 나는 것을 방지하기 위해

#define _CRT_SECURE_NO_WARNINGS를 적어준다.

 

int array[31] = { 0, };
    int a;

그 다음으로 크기가 31인 배열 array를 만들어주고, 0 번째 요소는 0으로 초기화해준다.

 

이렇게 하는 이유는 28개의 숫자를 받을 때 해당 숫자의 배열 요소에 1을 넣어서 어떤 배열 요소가 0인지 확인하기 위해서이다.

 

예를 들어서 27을 입력 받았으면 array[27] = 1을 해주고 26을 입력 받지 않았으면 array[26] = 0이 되게 하여 어떤 숫자가 없는지 확인할 수 있다.

for (int i = 0; i < 28; i++) {
        scanf("%d", &a);
        array[a] = 1;
    }

 

그 다음으로 28번 반복하는 반복문을 만들어준다.

여기서는 28개의 숫자를 받아서 해당 배열 요소에 1을 넣어준다.

예를 들어서 1~5 중에 3개의 숫자를 받은 뒤 없는 숫자를 찾으려면

a[1] = 1, a[2] = 0, a[3] = 1, a[4] = 1, a[5] = 0

이렇게 한 뒤, !a[숫자]일 때만 해당 숫자를 세면 된다.

 

for (int i = 1; i <= 30; i++) {
    if (!arr[i]) printf("%d \n", i);
}

이렇게 하면 array[1]부터 array[30]까지 돌면서 값이 0인 배열 요소를 찾는다.

 

//입력
3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//결과
2
8

따라서 결과는 이렇게 된다.

반응형

'BaekJoon' 카테고리의 다른 글

[BaekJoon] 3052번 나머지  (0) 2025.06.12