반응형

 

백준 3052번은 서로 다른 나머지의 개수를 출력하는 문제이다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>

int main(void) {
    bool visited[42] = { false };
    int input, count = 0;

    for (int i = 0; i < 10; i++) {
        scanf("%d", &input);
        int r = input % 42;
        if (!visited[r]) {
            visited[r] = true;
            count++;
        }
    }

    printf("%d", count);
    return 0;
}

 

전체적인 코드는 위와 같다.

 

코드의 흐름을 설명하자면, 10개의 입력을 받을 것인데, 각 입력에서 42로 나눈 나머지를 변수 r에 저장한다. 그 다음 크기가 42인 배열을 만들어준다. 그 이유는 42로 나눈 나머지는 0~41까지 가능하기 때문이다. 따라서 만약 나머지가 존재한다면 해당 번호의 칸을 true로 만들어준다.

 

예를 들어서 나머지가 1이라면 visited[1]이 false였다면 true로 바뀌면서 count가 하나 증가한다. 만약 1이라는 나머지가 또 발생해도 이미 visited[1]은 true이기 때문에 조건문 안의 내용이 실행되지 않으면서 count는 변화가 없게 된다.

 

bool visited[42] = { false };
int input, count = 0;

여기서는 bool 형 배열 42칸을 만들어주고, 각각의 값은 false로 초기화해준다.

정수형 변수 input과 count를 0으로 초기화해준다.

bool을 사용하려면 #define <stdbool.h>를 해주어야 한다.

 

for (int i = 0; i < 10; i++) {
        scanf("%d", &input);
        int r = input % 42;
        if (!visited[r]) {
            visited[r] = true;
            count++;
        }
    }

10번 반복한다.

사용자에게 숫자를 입력받아서 input에 넣는다.

r에 사용자에게 입력 받은 숫자를 42로 나눈 나머지를 저장한다.

visited[r]이 false라면 visited[r]을 true로 만들어주고, count를 1 증가시킨다.

 

예를 들어서 나머지가 1,2,3,4,5,5,6,6,7,7 이라면 visited[1], visited[2], visited[3], visited[4], visited[5]는 true가 되고 count가 5번 증가하여 count = 5가 된다.

그 다음 visited[5]는 이미 true이기 때문에 조건문이 실행되지 않는다.

그 다음 visited[6]은 false이기 때문에 true로 만들어주고 count를 1증가시킨다. count = 6

그 다음 visited[6]은 true이기 때문에 조건문이 실행되지 않는다.

그 다음 visited[7]은 false이기 때문에 true로 만들어주고 count를 1증가시킨다. count = 7

마지막으로 visited[7]은 true이기 때문에 조건문이 실행되지 않는다.

 

printf("%d", count);
return 0;

최종적으로 7이 출력된다.

 

//입력
1
2
3
4
5
5
6
6
7
7
//출력
7
반응형

'BaekJoon' 카테고리의 다른 글

[BaekJoon] 5597번 과제 안 내신 분..? - C언어  (0) 2025.06.10