문제
정수 10개를 입력받고, 그 수를 어떤 수로 나눈 나머지에서 서로 다른 숫자의 개수를 출력한다.
풀이
일단 당황하지 말고 천천히 생각해보자. 이 문제를 풀기 위해서 필요한 기능은
- 입력을 받고
- 나눈 다음
- 나머지에서 중복값을 빼는 기능
이다. 사실 입력은
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))
그래서 세트의 ‘길이’를 출력해야 한다.
'BOJ > [BOJ] Python' 카테고리의 다른 글
백준 8958번 풀이 (0) | 2022.08.18 |
---|---|
백준 1546번 풀이 (0) | 2022.08.18 |
백준 2577번 풀이 (0) | 2022.08.18 |
백준 2438, 2439번 문제 풀이 (0) | 2022.08.18 |
백준 8393번 풀이 (0) | 2022.08.18 |