코딩/백준 알고리즘

백준 3052:나머지(C++)

lee1201zxc 2023. 12. 15. 22:18
300x250
 

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로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

 

 

 

해설

 

42로 나눈 나머지를 구할 때 나올 수 있는 경우의 수는 몇개일까?
42로 나누어 떨어지는 0부터 41까지 총 42개이다.
그래서 42개짜리 배열을 만들고
0번째 인덱스는 나머지가 0인 경우의 존재 유무,
1번째 인덱스는 나머지가 1인 경우의 존재 유무....
41번째 인덱스는 나머지가 41인 경우의 존재 유무를 구하는 공간으로 만들면 된다.

처음에 정수를 입력 받는다. (s)
이 정수를 42로 나눈 나머지는 ' s%42 ' 이다. 
나머지가 s%42인 경우의 존재 유무를 파악하는 배열의 인덱스는 그대로 s%42이다.
이 값을 1로 바꿔주자(1->이때 나머지가 존재함)
이를 10번 반복한다.
이제 배열을 모두 확인하면서 1이 얼마나 나오는지 확인한다.
이 값이 서로 다른 나머지의 개수이다.
처음에 모든 배열의 값을 0으로 초기화 해주는 것을 잊지 말자.

 

 

코드

#include<iostream>
using namespace std;
int main()
{
    int a[42]={0,},ans=0;
    for(int i=0; i<10; i++)
    {
        int s;
        cin>>s;
        a[s%42]=1;
    }
    for(int i=0; i<42 ;i++)
    {
        if(a[i]==1)
            ans++;
    }
    cout<<ans;
}

 

ex) a[5]값이 1이라면 나머지가 5인 경우가 존재함.

728x90

'코딩 > 백준 알고리즘' 카테고리의 다른 글

백준 2231: 분해합(C++)  (1) 2023.12.16
백준 1929: 소수 구하기(C++)  (0) 2023.12.16
백준 2525-오븐 시계(C언어)  (1) 2023.12.15
백준 2753-윤년(C언어)  (0) 2023.12.14
백준 10171-고양이(C언어)  (0) 2023.12.14