⌨️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
반응형