두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
1
2
3
4
5
6
7
8
9
10
10
42
84
252
420
840
126
42
84
420
126
1
#include<stdio.h>
#include<stdbool.h>
int main() {
int N[10];//입력받을 배열 선언
int result; //나머지값을 넣을 변수 선언
int cnt = 0; //나머지값의 종류 개수 카운트
bool a[42]; // bool형의 a배열 선언
for (int i = 0; i < 42; i++) {
a[i] = false; //false로 초기화 해줌
}
for (int i = 0; i < 10; i++) {
scanf("%d", &N[i]);
result = N[i] % 42; //result변수에 입력받은 N배열 안의 숫자들을 42로 나눈 나머지값을 넣어줌
a[result] = true; // 나머지 값을 a배열의 result자리(ex. 나머지가 1이면 a[1])값을 true로 바꿔줌
}
for (int i = 0; i < 42; i++) {
if (a[i]) { // true값이 몇개인지 세는 작업
cnt++;
}
}
printf("%d", cnt);
}
boolean을 사용해서 풀면 간단히 풀 수 있는 문제이다.
처음 풀 때, bool을 사용할 생각을 못 해서 못 풀던 찰나에 선배 한 분이 힌트를 주셨다.
주석을 처음으로 달았는데 주석의 설명과 같이 입력받을 10자리 배열 N을 만들어준다.
bool형의 a배열을 만들어주는데, a배열 안에는 나머지 값 (ex. a[0]안에는 0, a[1]안에는 1이 들어가 있음. 41까지 나머지값이 나올 수 있으므로 a[42]로 선언) 을 넣어주는 배열이다.
a배열 모든 값을 false로 초기화시켜주고, 42로 나눈 나머지 값을 result 변수에 넣고, a[reult]를 true로 바꿔준 후 true가 몇 개 있는지 세면 끝!
되게되게 어려웠던 문제이지만, 여러개를 활용하면 쉬워진다! 열심히 공부해야지