백준 문제 풀이/c언어
백준 3052 C언어 문제 풀이 - 나머지
고딩프로그래머
2024. 1. 28. 19:48
728x90
문제링크 https://www.acmicpc.net/problem/3052
문제 이해
이 문제는 10개의 자연수를 입력받고, 이를 42로 나눈 나머지가 서로 다른 개수를 구하는 문제입니다.
즉, 10개의 자연수를 42로 나눈 나머지를 구하고, 서로 다른 나머지의 개수를 구하는 것이 목표입니다.
문제 해결
이 문제는 배열을 이용해서 각 자연수를 42로 나눈 나머지를 구하고, 나머지가 서로 다른 개수를 구하면 됩니다.
우선, 배열을 선언해서 10개의 자연수를 입력받습니다.
#include <stdio.h>
int main() {
int nums[10];
for (int i = 0; i < 10; i++) {
scanf("%d", &nums[i]);
}
// 이후 처리
return 0;
}
이제 각 자연수를 42로 나눈 나머지를 구합니다. 이를 위해서 반복문을 이용해서 각 자연수를 42로 나눈 나머지를 구하고, 이를 새로운 배열에 저장합니다.
#include <stdio.h>
int main() {
int nums[10];
int mods[42] = { 0, };
for (int i = 0; i < 10; i++) {
scanf("%d", &nums[i]);
int mod = nums[i] % 42;
mods[mod]++;
}
// 이후 처리
return 0;
}
이렇게 하면 `mods` 배열에는 0부터 41까지 각각 몇 번 등장하는지가 저장됩니다. 이를 이용해서 서로 다른 나머지의 개수를 구합니다. 이를 위해서 반복문을 이용해서 `mods` 배열을 검사하고, 값이 0보다 큰 원소의 개수를 구합니다.
#include <stdio.h>
int main() {
int nums[10];
int mods[42] = { 0, };
for (int i = 0; i < 10; i++) {
scanf("%d", &nums[i]);
int mod = nums[i] % 42;
mods[mod]++;
}
int cnt = 0;
for (int i = 0; i < 42; i++) {
if (mods[i] > 0) {
cnt++;
}
}
printf("%d\n", cnt);
return 0;
}
이렇게 하면 나머지가 서로 다른 개수가 `cnt`에 저장되고, 이를 출력하면 됩니다.
728x90