백준 3052번 풀이

문제

정수 10개를 입력받고, 그 수를 어떤 수로 나눈 나머지에서 서로 다른 숫자의 개수를 출력한다.

풀이

일단 당황하지 말고 천천히 생각해보자. 이 문제를 풀기 위해서 필요한 기능은

  1. 입력을 받고
  2. 나눈 다음
  3. 나머지에서 중복값을 빼는 기능

이다. 사실 입력은

import sys
a = int(sys.stdin.readline())
b = int(sys.stdin.readline())
c = int(sys.stdin.readline())
d = int(sys.stdin.readline())
e = int(sys.stdin.readline())
f = int(sys.stdin.readline())
g = int(sys.stdin.readline())
h = int(sys.stdin.readline())
i = int(sys.stdin.readline())
j = int(sys.stdin.readline())

이렇게 받아도 되긴 된다. 어쨌든 10개그덩. 근데 이렇게 하면 42로 나누는 것도 열 줄 해야 하고, 이걸 리스트업 하는 것도 일이다. 그리고 결과에서 서로 다른 숫자는 어떻게 셀 것인가? if라도 멕이게? 이런 끔찍한 사태를 막고자 반복문을 도입해보자.

import sys
a=[]
for i in range(10):
    a.append(int(sys.stdin.readline()))
print(a)

sys 뭐시기때문에 VScode 불렀음… ㅋㅋㅋㅋㅋㅋ VScode도 터미널에서 code 치면 되더라… 와…

아무튼, 그렇다. 입력을 10줄에 받는다고 했지 그렇다고 코드까지 저렇게 10줄로 일일이 치라고는 안 했으니 for문부터 때려박고 시작해보자.

import sys
a=[]
for i in range(10):
    a.append(int(sys.stdin.readline())%42)
print(a)

사실 이렇게 하면 알아서 42로 나눠서 추가도 해 주는데, 문제에서는 입력 받고 추가하는거니까 이렇게 하면 안 된다.

import sys
a=[]
for i in range(10):
    b=int(sys.stdin.readline())
    a.append(b%42)
print(a)

그래서 입력 받고 나눠드렸습니다. 아 어쨌든 입력 받고 나눈거임. 논리왕

import sys
a=[]
for i in range(10):
    b=int(sys.stdin.readline())
    a.append(b%42)
a=set(a)
print(a)

리스트의 중복값을 처리하는 방법 중 하나가 set()이다. 세트로 만들면서 중복값이 없어지게 되는데, 그렇다고 이 코드를 그냥 제출하면 틀린다. 왜냐… 문제에서 서로 다른 숫자의 개수를 출력하라고 했지, 서로 다른 숫자들을 표시하라고 한 게 아니거든.

import sys
a=[]
for i in range(10):
    b=int(sys.stdin.readline())
    a.append(b%42)
a=set(a)
print(len(a))

그래서 세트의 ‘길이’를 출력해야 한다.