본문 바로가기
Develop/백준 (python)

[백준] 3052번: 나머지 (python)

by Tarra 2022. 1. 8.

3052번: 나머지


문제)

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

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

 

입력 :

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

 

출력 :

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

 

 

풀이)

 

1
2
3
4
5
6
7
8
9
10
11
12
nums = []
for i in range(010):
    temp = int(input())
    temp = temp % 42
    nums.append(temp)
 
nums = set(nums)
 
ct = 0
for i in nums:
    ct += 1
print(ct)
cs

 

위 문제를 해결하기 위해서 중복을 제거해야 했고, 방법을 찾던 와중에 

집합 자료형인 set은 중복을 허용하지 않는다는 것을 알게 되었다. 그래서 list를  만들고, 이걸 다시 set()을 이용해

집합을 만들어 갯수를 세는 방식을 채용해 문제를 해결하였다.

블로그 포스팅을 하던 도중에 직접 set에 추가하면 되지 않을까? 라는 생각을 하게 되었고, 집합 자료형에

값을 추가하는 함수인 add를 발견하게 되었다.

그렇게 나온 개선된 알고리즘은 다음과 같다.

 

1
2
3
4
5
6
7
8
9
10
nums = set()
for i in range(010):
    temp = int(input())
    temp = temp % 42
    nums.add(temp)
 
ct = 0
for i in nums:
    ct += 1
print(ct)
cs

 

확실히 리스트를 거치지 않아 간결해진 모습을 볼 수 있다.


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

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net