본문 바로가기

C++/백준

[C++][백준] 3052 나머지

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

 

3052번: 나머지

문제 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.  수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오. 입력 첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다. 출력 첫째 줄에, 42로 나누었

www.acmicpc.net

문제

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

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

입력

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

출력

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

예제 입력 1

39

40

41

42

43

44

82

83

84

85

예제 출력 1

6

힌트

39, 40, 41, 42, 43, 44, 82, 83, 84, 85를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 모두 6개가 있다.

 

풀이

숫자를 저장하는 배열인 tmp을 만들고

입력받은 수를 42로 나눈 나머지를 인덱스로 하여 tmp배열의 값을 +1 해준다.

그 다음 for문을 돌면서 tmp 배열의 값이 0이 아니라면 cnt++을 해주면 나머지로 나오는 수의 개수를 알 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include<string>
 
int main() {
    int list[10];
    int tmp[42]={0};
    int cnt=0;
 
    for(int i=0; i<10; i++){
        scanf("%d",&list[i]);
        tmp[list[i]%42]++;
    }
    
    for(int i=0; i<42; i++)
        if(tmp[i]!=0)
            cnt++;
 
    printf("%d\n",cnt);
  
}
 

'C++ > 백준' 카테고리의 다른 글

[C++][백준] 4673 셀프 넘버  (0) 2020.03.10
[C++][백준] 4344 평균은 넘겠지  (0) 2020.03.10
[C++][백준] [정렬] 3047 ABC  (0) 2020.03.10
[C++][백준] [정렬] 2959 거북이  (0) 2020.03.10
[C++][백준] [정렬] 2870 수학숙제  (0) 2020.03.10