서두르지 말고 쉬지 말자

백준 3052번 나머지(C++) 본문

코딩 공부/Baekjoon Problem Solving

백준 3052번 나머지(C++)

philos 2024. 11. 22. 18:14

문제 해결 전략: 먼저 42개의 요소를 가질 수 있는 배열을 각 요소를 모두 0으로 초기화해서 선언한다. 숫자를 10개 받고 그 수를 42로 나눠서 나온 수와 같은 배열의 요소자리의 수를 1증가 시킨다. 배열의 각 요소는 42로 나눴을 때 나올 수 있는 결과값을 상징한다. 따라서, 어떤 요소가 0보다 크면 이는 그 값이 나왔다는 뜻이다. 그 후 0이 아닌 요소의 수를 출력한다.

 

문제 해결 소감:  겹치는 부분을 어떻게 검출할까 생각했다. 처음에는 각 요소에 들어있는 수들을 일일이 비교할려 했는데 그렇게 하면 매우 복잡해졌고 겹치는 걸 어떻게 처리할지도 몰랐다. 그래서 다른 사람들 풀이를 봤다. 나는 배열에 수를 저장하고 무언가를 하려고 했는데 다른 사람들은 나온 빈도에 대한 배열을 만들어서 해결하는 걸 봤다. 큰 도움이 되었다. 이렇게 또 하나 알았다!

 

#include <iostream>

int arr[43] = {};
int cnt = 0, num = 0;
int main(void)
{
    for (int i = 0; i < 10; i++)
    {
        std::cin >> num;
        arr[num % 42] += 1;
    }
    for (int n : arr)
        if (n > 0)
            cnt++;

    std::cout << cnt;
}
반응형