코딩하는 덕구 🐶

34. C++ 백준 3052 번 나머지 본문

알고리즘 문제 풀이

34. C++ 백준 3052 번 나머지

코딩하는 덕구 🐶 2022. 1. 22. 18:27
728x90

안녕하세요! 코딩하는 덕구입니다~!

C++ 백준 3052 번 입니다~!

문제

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

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

입력

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

#include<iostream>
using namespace std;
int main() {
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    int arr[42] = {0,};         //나머지가 나오는지 저장하기 위한 배열 생성
    int input, sum = 0;			//입력을 받기위한 정수 input, 합을 저장하기 위한 정수 sum을 생성
    for(int i = 0; i<10; i++){	
        cin>>input;
									//for문을 이용해 input을 10번 받고, input을 42로 나눴을때의 
        arr[input%42] = 1;			//42로 나눈 후 나머지 숫자에 맞는 배열의 성분을 1로 바꾸어줌 
    }

    for(int i = 0; i<42; i++){
        sum = sum + arr[i];			//배열을 0부터 41까지 돌면서 합해줌 
        							//(나머지가 나왔으면 1, 없으면 0) 
    }

    cout<<sum; 						//합을 출력

    return 0;
}

 

먼저 나머지가 나오는지 체크하기 위한 배열을 int arr[42] = {0,} 으로 생성하고

bool type으로 생성해도 가능 하지만 서로 다른 값이 몇 개 있는지 출력해야 되므로 

계산 편의성을 위해 int type으로 해주었습니다~!

 

int arr[42] = {0,} 을 하게되면 0번 부터 41번 (처음부터 배열의 끝)까지의 성분이 0으로 초기화 됩니다.

10개의 input을 입력 받은 후 42로 나눠 그 나머지 값을 배열 번호로 취급하고 그 배열의 성분은 1로 바꾸어 줍니다.

이미 나온 나머지 여도 1 에서 1로 변경, 처음 나왔어도 0에서 1로 변경 되므로 중복을 쉽게 제거할 수 있죠!

 

이제 배열의 성분들을 더하기만 하면 됩니다!

 

C++ 백준 3052 번 이었습니다! 감사합니다~!

728x90