알고리즘

[알고리즘] 백준 3052 : 나머지

녕녕펀치 2024. 8. 6. 20:24

https://www.acmicpc.net/problem/3052

 

 

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

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

 

이거보자마자 배열이 바로 생각나서 일단 배열을 선언해줌!

#include <iostream>
using namespace std;

int main(){
    int n, sum;
    int arr[42];
}

왜 42개냐?!!!!! 42로 나눈 나머지니깐 나머지가 될 수 있는 것은 0~41까지 → 총 42개

 

그러고 나머지가 0이면 배열 0번째에 저장, 3이면 배열 3번째에 저장하는 식으로 진행!

 

for(int i=0; i<42; i++){
        arr[i] = 0;
}

먼저 모든 배열 안의 수를 0으로 지정

 

for(int i=0; i<10; i++){
        cin >> n;
        arr[n%42]++;
}

저장을 할 때마다 배열 x(나머지 수)번째에 +1 해주는 코드 작성

 

sum을 선언 !!
sum == 입력을 다 하고 나온 서로 다른 나머지 값의 수

int sum;
sum = 42;

왜 42냐???

나는 나올 수 있는 나머지 수가 42여서 나머지가 안나온 것을 하나씩 빼기 위해 42로 선언함!!!!!

 

 

 

그럼 안한게 뭐가 있찌??????

 

 

 

나머지가 안나온 것을 하나씩 뺴기?

 

웅 마자 정답 !

for(int i=0; i<42; i++){
    if(arr[i]==0){
        sum --;
    }
}

배열 arr 안에서 0이면 sum을 하나씩 빼기 ~~~~

arr 안에서 0이 의미하는 것 == 나머지가 안나왔다는 것

ex) 배열 안 3번째가 0이면 나머지가 3인 것이 안나왔다는 것 !

 

최종 코드

#include <iostream>
using namespace std;

int main(){
    int n, sum;
    int arr[42];
    sum = 42;
    for(int i=0; i<42; i++){
        arr[i] = 0;
    }

    for(int i=0; i<10; i++){
        cin >> n;
        arr[n%42]++;
    }
    for(int i=0; i<42; i++){
        if(arr[i]==0){
            sum --;
        }
    }
    cout << sum ;
    return 0;
}

 

 

쨔잔~★