백준 문제 풀이/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