본문 바로가기
코딩테스트

[Python] 백준 1546 풀이

by CuckooBird 2022. 12. 29.

문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.


출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.


코드

n = int(input())
n_list = list(map(int,input().split()))
max_n = max(n_list)
new_list = []
for i in n_list:
    new_list.append(i/max_n*100)
sum = 0
for i in new_list:
    sum += i
print(sum/n)

간단한 코드지만 파이썬 문법 면에서 약간 애를 먹었다.

깨달은 것은 크게 두가지 이다.

 

첫번째는 리스트를 쪼개서 입력하는 두번째 줄 코드이다. map 이라는 것을 그냥 쓰기만 하고 무슨 말인지는 이해하지 않고있었다는 것을 이제야 깨달았다.

우선, map이란 리스트의 원소마다 특정한 함수를 적용시키는 역할을 한다.

그래서 map을 사용할 때에는 함수와 적용할 함수를 반복가능한 객체가 필요하다.

>>> n_list = map(int,input().split())
<map object at ...>

이렇게 n_list를 생성하게 되면 n_list는 map객체로 반환이 된다. (내일 계속 쓸거임)

 

두번째는 '/' 연산자는 float형을 연산할 수 없다. (아마 vscode만의 문제인 것 같다... python idle 에서는 잘 작동함)


후기

정말 간단한 코드라 블로그에 올릴 정도도 아니었지만 파이썬의 문법에 대해 다시 한번 배워가는 시간이 되었다.

종강하고 일주일 간 공부도 하지않고 가만히 있자니 유튜브만 보고 시간을 낭비하고 있는 나자신을 발견했다. 뭐라도 하겠다는 마음으로 다시 책상앞에 앉아 생각을 해봤는데, 학기 중에 쏟아졌던 백준 과제에 시간 문제로 인해 다른 사람의 코드를 많이 베껴왔던 것 같다. 이번 방학에는 학기중에 했던 과제들을 다시 풀어보는 시간을 가져야겠다.

'코딩테스트' 카테고리의 다른 글

[Python] 백준 4344 풀이  (0) 2022.12.30
[Python, C] 백준 1110번 풀이  (0) 2022.12.29
[C언어] 백준 5554 풀이  (0) 2022.05.06
[C언어] 백준 3046 풀이  (0) 2022.05.05
[C언어] 백준 14681 풀이  (0) 2022.04.10