Coding_TEST

[Baekjoon 1546] 평균 (python)

Jerry_JH 2021. 6. 9. 13:03
728x90

문제 공유: https://www.acmicpc.net/problem/1546

 

1546번: 평균

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

www.acmicpc.net

 

[문제설명]

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

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

 

[제한사항]

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

 

[입출력 예]

  예제 입력 예제 출력
예제1 3
40 80 60
75.0
예제2 3
10 20 30
66.66667
예제3 4
1 100 100 100
75.25
예제4 5
1 2 4 8 16
38.75

 

[입출력 예 설명]

예제 1번같은 경우, 세준이의 최고점이 80이고, 수학점수가 40이었으면 수학점수는 40/80*100이 되어 50점이 된다.

40/80*100이 되어 50점

80/80*100이 되어 100점

60/80*100이 되어 75점

평균은 75점


[풀이 설명]

n = int(input())
new_average = 0
score_list = []

score_list.extend(input().split())
score_list= list(map(int,score_list))

for j in score_list:
    new_average += (j/max(score_list)*100)
    
print(new_average / n)

코드가 상당히 긴 것을 볼 수 있다. 

 

변수 설명을 하자면 이러하다.

n = 시험 본 과목의 개수

score_list = 과목들의 점수를 기록하는 list

new_average = 새로운 평균은 입력할 변수

 

코드가 돌아가는 메커니즘은 이러하다.

 

1. n으로 시험 본 과목의 개수를 받는다.

2. 각종 변수들을 선언한다.

3. 1개만 입력받아서 넣으면 append로 해도 상관없지만, 여러 개가 입력되기 때문에 extend를 사용했다.

4. 리스트안에 문자로 들어갔기 때문에 map을 이용해서 정수형으로 타입변환을 해주었다.

5. 점수/최대점수*100으로 계산하여 new_average에 sum해주었다.

6. 평균으로 출력

 


하지만 이러한 과정을 굉장히 짧게 풀이한 좋은 예시의 코드가 있었다.

ln = input()
nums = [int(i) for i in input().split()]
maxim = max(nums)
print(sum([i*100/maxim for i in nums])/len(nums))

메커니즘은 두개 다 비슷하다.

다만, 점수들을 입력받아서 map 사용없이 한번에 int로 변환하여 넣었다.

 

이런거 보면, 한 줄 반복문에 대한 연습이 많이 필요해보인다.

 

 

728x90