[ 백준 문제 3052 / 파이썬 ] 나머지

2023. 2. 8. 15:28백준/파이썬

 

3052번: 나머지

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

www.acmicpc.net

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

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

 

 

나의 정답 :

 

import sys
input = sys.stdin.readline
num = []

[ num.append(int(input()) % 42) for i in range(10)]

count_dict = {}

for j in num:
   try:
      count_dict[j] = +1

   except:
      count_dict[j] = 1

print(len(count_dict.keys()))

 

파이썬 리스트 안에 중복되는 원소가 있는지 알려면

요소의 개수를 카운트해줘야합니다.

 

요소의 개수 카운트 하는 방법

try:
except:
를 이용해줍니다.

에러를 처리할 때만 쓰이는 줄 알았는데,
이럴 때도 쓰입니다.
 
j에 리스트 값을 차례로 넣어줍니다.

try문과 except문 실행 전의
count_dict 안은 빈 상태라 

try문을 만났을때 j라는 key가 count_dict에 없기 때문에
사전 안에서 j라는 key를 못 찾습니다.
그 value를 +1 해줄 수가 없습니다.

예외!로 갑니다.
except 문안에서
묻지도 따지지도 않고
count_dict에 j라는 key가 만들어지고,
그 value는 1이 됩니다.

이런 방식이면, count_dict에 존재하는 key값이 들어오면 (중복되는 key) try문이 실행될 것이고
=> key j의 value가 1 증가

중복되지 않는 새로운 key값이 들어오면 except문이 실행될 것입니다.
=> value가 1인 key j가 새롭게 추가

 

print(len(count_dict.keys()))

 

key의 개수를 세주면

문제에서 요구하는 서로 다른 값의 개수를 알 수 있겠죠?