[BOJ 백준] 3052 - 나머지 (C++ / Python)

문제 바로가기

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


관련 알고리즘

- 해당 없음


정답 및 해설

10개의 정수를 입력받아 모두 42로 나눈 나머지를 계산하여 그 종류가 몇개인지 찾는 문제이다.

bool 타입 Remains[42] 배열을 정의하여 0으로 초기화한다.

그 후, 나머지(N)를 계산할 때마다 Remains[N]의 값을 1로 바꾸어주고

마지막에 Remains 배열을 확인하여 값이 1인 경우의 갯수를 세서 출력하면 될 것이다.

C++

더보기
#include<bits/stdc++.h>
using namespace std;
int main(){
    bool Remains[42]={0,};
    int num,ans=0,i;
    for(i=0; i<10; i++){
        cin>>num;
        Remains[num%42]=1;
    }
    for(i=0; i<42; i++)
        if(Remains[i]) ans+=1;
    cout<<ans;
}

 

Line 해설
4 bool 타입 Remains[42] 배열을 정의한 다음 0으로 초기화시켰다.
Remains[N] 은 나머지가 N이 나오는 수가 존재하는지 여부를 저장한다.
나머지가 0부터 41까지 42개의 숫자가 존재하기 때문에 길이를 42로 설정하였다.
6~8 num 변수에 정수를 입력받은 다음 num%42로 나머지를 구하고
Remains[num%42]=1로 나머지의 존재여부를 True(1)로 변경하였다.
9~11 Remains 배열을 반복하면서 if 조건문을 통해 Remains[i]가 True(1)인 경우에 ans+=1을 실행한다.
결국 ans에 나머지의 종류가 몇개인지 저장되고 출력하여 정답을 구한다.

9~10 부분은 이 글에서 소개했던 for-each 구문을 사용하여 아래와 같이 쓸 수 있다.

/*	(생략)	*/
    for(bool T : Remains)
        if(T) ans+=1;
/*	(생략)	*/

Python

더보기
Remains=[False]*42
for _ in range(10):
    N=int(input())
    Remains[N%42]=True
ans=0
for T in Remains:
    if T:
        ans+=1
print(ans)

 

Line 해설
1 [False]로 구성된 크기 42배열 Remains를 정의했다.
2~4 정수 N을 입력받고 N%42로 나머지를 구하여 Remains[N%42]를 True로 변경하는 것을 10번 반복한다.
6~9 Remains의 요소를 T에 하나씩 순서대로 대입하며 반복문을 실행한다.
if T 조건문으로 Remains의 반복자(iterator) T가 True 일 경우 ans의 값을 1 증가시킨다.
마지막에 ans를 출력하여 정답을 구한다.