본문 바로가기
7장 기타/백준 BOJ

[백준/BOJ] 3052번 나머지 (C++)

2021. 5. 10.
 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

문제의 소재

수를 10개 입력받아 이를 42로 나눈 후 서로 다른 수의 개수를 세는 문제이다.

해답

bool형 배열 num[42]를 false로 초기화 하였다. 그리고 10개의 수를 입력받으면서 입력받은 수 a를 42로 나눈 나머지에 대하여 num[a%42]= true;로 숫자의 유무를 체크하였다. 이후에 각각의 num항에 대해 true의 개수를 측정하여 출력하였다.

// BOJ_3052.cpp
#include<iostream>
using namespace std;

int main()
{
    int a, answer;
    bool num[42] = {0};
    
    for (int i=0;i<10;i++)
    {
        cin>>a;
        num[a%42] = true;
    }
    answer = 0;
    for (int i=0;i<42;i++)
        if (num[i] == true) answer++;
    cout<<answer<<endl;

    return 0;
}

배열을 이용하지 않고 std를 이용할 수도 있다. set을 이용하여 a%42를 set에 입력하면 중복되는 원소는 저장되지 않기 때문에, 10개의 a%42를 입력하고 set의 사이즈를 통해 서로 다른 수의 개수를 구할 수 있다.

// BOJ_3052.cpp
#include<iostream>
#include<set>
using namespace std;

int main()
{
    int a;
    set<int> s;

    for (int i=0;i<10;i++)
    {
        cin>>a;
        s.insert(a%42);
    }
    cout<<s.size()<<endl;

    return 0;
}
반응형

댓글