문제의 소재
수를 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;
}
반응형
댓글