문제 바로가기
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를 출력하여 정답을 구한다. |
'Coding > BOJ' 카테고리의 다른 글
| [BOJ 백준] 10250 - ACM 호텔 (C++ / Python) (1) | 2023.11.11 |
|---|---|
| [BOJ 백준] 8958 - OX퀴즈 (C++) (0) | 2023.11.10 |
| [BOJ 백준] 2920 - 음계 (C++) (1) | 2023.11.09 |
| [BOJ 백준] 2884 - 알람 시계 (C++) (0) | 2023.11.07 |
| [BOJ 백준] 2675 - 문자열 반복 (C++ / Python) (1) | 2023.11.06 |