⌨️CS-PS/백준_수학&구현
[Baekjoon/백준][3052][C/C++] 나머지
미르의 블로그
2023. 1. 31. 10:26
728x90
반응형
『목차』
0. 개요
1. 문제
2. 풀이
3. 코드
0. 개요
수학, 사칙연산 문제. 바로 문제풀이로 넘어가겠다.
1. 문제
https://www.acmicpc.net/problem/3052
3052번: 나머지
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
www.acmicpc.net
[문제]
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
[입력]
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
[출력]
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
[예제 입력 1]
1
2
3
4
5
6
7
8
9
10
[예제 출력 1]
10
각 수를 42로 나눈 나머지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이다.
[예제 입력 2]
42
84
252
420
840
126
42
84
420
126
[예제 출력 2]
1
모든 수를 42로 나눈 나머지는 0이다.
[예제 입력 3]
39
40
41
42
43
44
82
83
84
85
[예제 출력 3]
6
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
2. 풀이
42로 어떤수를 나눈 나머지는 0~41 사이에 존재한다. ∴ 나머지에 해당하는 값을 체크할 수 있는 배열 remainder를 선언한 뒤, 0으로 초기화하고, 나머지의 개수를 세어준다. 이때, 배열의 값이 1이상인 것의 개수를 세어주면, 서로 다른 나머지 값이 몇 개 있는지를 알 수 있다.
3. 코드
#pragma warning (disable:4996)
#include <stdio.h>
#include <stdbool.h>
int main(int argc, char* argv[]) {
int input;
bool remainder[42]={}; //나머지에 해당하는 값 체크.
/* 서로 다른 나머지 개수 세기 */
for (int i = 0; i < 10; i++) {
scanf("%d", &input);
input %= 42;
remainder[input] = true;
}
/* 출력 */
int count = 0;
for (int i = 0; i < 42; i++)
if (remainder[i] == true) count++;
printf("%d", count);
/* 마무리 */
return 0;
}
728x90
반응형