https://www.acmicpc.net/problem/3052
n = []
for _ in range (10) :
n.append(int(input()) % 42)
n = set(n)
print(len(n))
set()함수를 사용하면 쉽게 풀어낼 수 있다. set() 함수 사용법을 몰랐는데 알게 되었다.
set은 집합을 의미하여, 집합에는 중복되는 숫자가 존재하지 않는 것처럼 set함수에서도 중복되지 않은 원소들만 들어갈 수 있다.
중복되지 않은 항목의 개수를 구하기 위해서 set함수의 길이를 구해주면 된다.
c.f set()함수는 중복된 값을 뺄 수 있으나, 순서가 뒤죽박죽이 된다. 이 문제에서는 순서대로 출력할 필요가 없으므로 사용가능하다.
n = []
rem = [0 for _ in range(42)]
cnt = 0
for i in range(10) :
n.append(int(input()))
rem[n[i]%42] += 1
for i in range(42) :
if (rem[i] != 0) :
cnt += 1
print(cnt)
문제 푸는 새로운 시각을 얻었다!
42의 나머지는 0~41이기에 42개의 '0'을 가지는 리스트를 만든다.
그리고 10개의 수를 입력 받으며 42로 나눈 나머지를 구하고, rem 리스트에서 해당하는 나머지의 값을 1씩 추가한다.
또다른 for문을 이용해 rem 리스트 중 0이 아닌 항목을 세면 중복 없이, 다른 나머지를 갖는 수를 셀 수 있다.
>>> s = {3, 5, 7}
>>> s
{3, 5, 7}
>>> type(s)
<class 'set'>
>>> s = {}
>>> type(s)
<class 'dict'>
>>> s = set()
>>> type(s)
<class 'set'>
>>> s
set()
>>> s = {1, 5, 1, 1, 1, 3, 7}
>>> s
{1, 3, 5, 7}