728x90
반응형
https://www.acmicpc.net/problem/2822
문제를 풀면서 몰랐던 개념
[Python] enumerate 함수
-> 리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능을 한다.
for i, name in enumerate(['body', 'foo', 'bar']):
print(i, name)
# 출력 결과
0 body
1 foo
2 bar
0번째부터 출력되기 때문에 1번째부터 출력을 원하면 i+1을 해주면 된다!
문제의 접근 방법
- 참가자의 점수 8개 입력 받기
- 입력으로 주어지는 순서대로 번호 매기기
- 참가자의 점수 정렬해서 큰 순서대로 5개의 값 더하기
- 출력된 5개의 점수들의 번호를 정렬하기
내가 막혔던 부분
(1) 입력 받는 점수들에 대해 어떻게 번호를 부여해야 하는지 알지 못했음.
(2) 번호와 점수들을 각각 다른 리스트에 넣어서 정렬하려고 함.
(3) list comprehension 으로 구현하는 데 어려움을 겪었음.
문제 풀이 방법
반복문을 통해 총 8개의 점수들을 입력 받는다 -> 입력 받은 점수들을 arr 리스트에 추가한다 -> enumerate 함수를 사용해서 arr2 리스트에 2차원 배열로 번호와 점수를 짝지어서 추가한다(정렬을 위해 점수와 인덱스 순서를 반대로 추가함) -> arr2 리스트를 내림차순으로 정렬한다 -> 반복문을 사용해서 arr2 안에 있는 요소들 중 [i][0]번째 값(점수)을 5번 추출해서 더해주고, [i][1]번째 값들(번호)은 arr3 리스트에 추가해준다. -> arr3를 오름차순으로 정렬한다 -> 출력 형식에 맞게 합산한 값과 정렬된 번호들을 출력.
소스코드
arr = []
arr2 = []
arr3 = []
sum = 0
for i in range(8):
s = int(input())
if (0<=s<=150):
arr.append(s)
for i, score in enumerate(arr):
arr2.append([])
arr2[i].append(score)
arr2[i].append(i+1)
arr2 = sorted(arr2, reverse=True)
for i in range(5):
sum += arr2[i][0]
a = arr2[i][1]
arr3.append(a)
arr3 = sorted(arr3)
print(sum)
for i in arr3:
print(i, end=' ')
728x90
반응형
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 시리얼 번호 : 1431번 - Python (0) | 2021.07.17 |
---|---|
[백준] 중복 빼고 정렬하기 : 10867번 - Python (0) | 2021.07.16 |
[백준] 접미사 배열 : 11656번 - Python (0) | 2021.07.16 |
[백준] 보물 : 1026번 - Python (0) | 2021.07.16 |
[백준] 좌표 정렬하기 2 : 11651번 - Python (0) | 2021.07.16 |