두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int input = 0;
int mod42[42] = {0, };
for (int i = 0; i < 10; i++)
{
cin >> input;
mod42[input % 42]++;
}
int count = 0;
for (int i = 0; i < 42; i++)
{
if (mod42[i] > 0)
count++;
}
cout << count << endl;
return 0;
}
mod42의 계산 결과에서 서로 다른 값을 가진 경우를 출력해야하므로, mod 42가 될 수 있는 값들을 배열번호로 지정했다.
이후 input값을 입력받아 42로 나눈 나머지값을 배열번호로 지정한다. 이후 mod42의 해당 배열번호를 호출해 값을 증가시킨다.
마지막으로 42번 반복하면서 mod42의 배열을 살펴보며 0보다 큰 값이 있는지 체크한다. 이 방법은 수가 곂치는지 확인하지 않을 수 있고 이미 mod42의 배열번호에 들어간 값이 나머지가 나온 경우의 수이므로 0보다 큰 배열번호만 세면 된다.
예를 들어보자, 32를 42로 나누면 나머지가 32이다. 그럼 mod42[32]의 값이 1 증가하게 된다. 이 방법으로 10개의 수를 전부 체크한 후, mod42 배열을 전부 검색하게 된다. 아무리 32라는 나머지가 2개, 3개 나와도, mod42[32]의 값이 0보다 크기만 하면 된다. 그러면 count할때 32, 단 하나만 체크하면 되므로, mod42[32]가 0보다 크기만 한지 확인하면 된다.