본문 바로가기
코딩테스트 문제풀이(Python)

백준 2822번 문제풀이(파이썬)

by chanfficial 2022. 5. 15.

2822. 점수 계산

 

 

상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다.
상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총 점수를 구하는 프로그램을 작성하시오.

 

 

 

입력 : 8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문제, ... 8번 문제이다.

출력 : 첫째 줄에 참가자의 총점을 출력한다. 둘째 줄에는 어떤 문제가 최종 점수에 포함되는지를 공백으로 구분하여 출력한다. 출력은 문제 번호가 증가하는 순서이어야 한다.

 

 

 

ex)

입력 :

20
30
50
48
33
66
0
64

출력 :

261
3 4 5 6 8

 

 

 

 

 

 

풀이

score = []
max_score = []
question = []

for i in range(8):
    a = int(input())
    score.append(a)

score_copy = score.copy()

for i in range(5):
    max_score.append(max(score))
    score.remove(max(score))

print(sum(max_score))

for i in range(5):
    question.append(score_copy.index(max_score[i]))

question.sort()

for i in range(5):
    print(question[i]+1, end=' ')

- 우선 참가자의 점수가 모두(8개) 들어있는 score, 가장 높은 점수 5개가 들어있는 max_score, 가장 높은 점수 5개의 문제번호가 들어있는 question까지 3개의 리스트를 생성했다.

 

첫 번째 반복문에서는 8문제에 대한 점수를 하나씩 입력받아 append()를 사용하여 score 리스트에 추가했다

그런 다음 나중에 문제 번호를 알아내기 위해 score를 copy하여 똑같은 리스트인 score_copy를 생성했다.

 

두 번째 반복문에서는 가장 높은 점수 5개를 골라내기 위해 append()와 max()를 사용하여, 리스트 max_score에 가장 높은 점수를 추가하고, remove()를 사용하여 추가한 점수를 score 리스트에서 삭제했다. 이를 다섯 번 반복하며 차례로 가장 높은 점수를 리스트 max_score 추가하도록 했다.

그리고나서 가장 높은 점수 5개의 합인 총 점수를 sum()을 사용하여 출력했다.

 

세 번째 반복문에서는 가장 높은 점수 5개의 문제번호를 찾아내기 위해, 리스트 요소의 인덱스 번호를 알려주는 index()를 사용하여 가장 높은 점수 5개 각각의 인덱스 번호를 question 리스트에 추가했다. 

(이때 두 번째 반복문에서 remove()를 사용하여 score 리스트의 요소가 대부분 삭제되었으므로 미리 copy해둔 score_copy 리스트를 사용했다.)

 

마지막으로 5개의 문제번호가 있는 question 리스트를 오름차순으로 정리하여, 한 줄에 모두 출력하도록 했다.

(문제 번호는 0번이 존재하지 않기 때문에 question + 1 처럼 1을 더해주었다.)