본문 바로가기
BOJ/[BOJ] Python

백준 3052번 풀이

by Lv. 35 라이츄 2022. 8. 18.

문제

 

3052번: 나머지

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

www.acmicpc.net

정수 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))

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

'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

최근댓글

최근글

skin by © 2024 ttutta