Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze

BOJ 3052번 : 나머지 (C++/Bronze 2)

dev스카이 2022. 8. 12. 12:20
 

3052번: 나머지

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

www.acmicpc.net

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

 

출력

첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.


예제 입력

39
40
41
42
43
44
82
83
84
85

예제 출력

6

풀이

vector n(n) : n개의 원소를 0으로 초기화 시켜서 만든다.

n.erase(unique(n.begin(), n.end()), n.end()) : 중복 제거

    - unique() : 중복되지 않는 원소들을 앞에서부터 채워나간다. 나머지 자리에는 기본 배열 원소 값이 채워진다.

Solution

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

vector<int> n(10);
int main() {
    for(int i=0; i<n.size(); i++){
        cin >> n[i];
        n[i] = n[i] % 42;
    }
    sort(n.begin(), n.end());
    n.erase(unique(n.begin(), n.end()), n.end());
    cout << n.size();
    return 0;
}