백준 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 |
---|