백준/C++

[백준] 3052번: 나머지 | C++ 풀이

성실한 당근농부 2023. 5. 13. 09:03

# 문제

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

 

 


 

# 풀이

이 문제는 무엇을 구해야 하는지 잘 봐야한다.

서로 다른 나머지가 몇 개 있는지 출력하면 되는 문제다.

바로 정답 소스코드를 확인해보자.

 

#include <iostream>
using namespace std;

int main(){    
    bool remainder[42] = {0}; // 42로 나눈 나머지는 0~41까지 존재
    int num;
    int cnt = 0;

    while(cin >> num){
        remainder[num%42] = 1;
    }

    for(int i=0; i<42; i++){
        if(remainder[i] == 1) cnt++;
    }
    
    cout << cnt;
    return 0;
}

 

주석에도 적어둔 것처럼 어떤 숫자를 42로 나눌 경우, 나머지는 0부터 41까지 존재한다.

따라서 bool 타입으로 0~41번 인덱스가 존재하는 크기 42의 배열을 만들고 기본 값을 false로 설정해두었다.

그리고 숫자를 입력받을 변수 num, 서로 다른 나머지가 몇 개 있는지 세어줄 cnt 변수를 만들었다.

 

 

while(cin >> num){
    remainder[num%42] = 1;
}

 

지난 번처럼 EOF를 활용해 입력과 반복문 처리를 해주고, num%42로 나눈 나머지 값을 배열의 인덱스로 넣었다.

한 번이라도 나온 나머지 값은 true로 변경해주면, 입력을 모두 받은 후 true인 것만 세어 출력하면 된다.

 

 

 

 for(int i=0; i<42; i++){
     if(remainder[i] == 1) cnt++;
 }
   
 cout << cnt;

 

간단하게 끝!

 

 

 

 


 

 

 

3052번: 나머지

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

www.acmicpc.net

 

728x90