728x90
반응형
https://www.acmicpc.net/problem/2535
문제를 풀면서 몰랐던 개념
(1) [Python] 2차원 배열 슬라이싱
-> 2차원 배열에서는 행에 대해서는 슬라이싱을 하지 않고 접근해야 한다!
arr = [[1, 2, 3, 4], [5, 6, 7, 8]]
[print(arr[i][:2]) for i in range(len(arr))]
>> [1, 2]
>> [5, 6]
(2) [Python] asterisk(*) 사용 용도
-> 곱셈과 거듭제곱
-> 리스트 확장
-> 가변 인자
-> Unpacking (이번 코드에서 배운 것!)
: 알고리즘을 짜다보면 결과 부분을 출력할 때, for문을 이용하여 list를 순회하며 출력하는 경우가 있는데 '*'를 사용하면 코드 길이도 줄고 훨씬 편리하다.
arr = [1, 2, 3, 4]
print(*arr)
>> 1 2 3 4
문제의 접근 방법
- 점수를 기준으로 내림차순 정렬
- 배열의 슬라이싱 사용
- 조건문을 통해 나라별 최대 메달 개수 2개로 제한하기
내가 막혔던 부분
- 2차원 배열에서의 슬라이싱을 통해 값을 추출하는 방법
- 나라별 최대 메달 개수가 2개가 되었을 때, 그 다음 나라에서 가장 점수가 높은 사람에게 메달을 부여하는 방법
문제 풀이 방법
참가 학생 수 n명 입력 받기 -> n번만큼 소속 국가, 학생 번호, 점수를 입력받아 리스트에 저장한 후 '점수'를 기준으로 내림차순 정렬을 한다 -> 금메달과 은메달은 같은 국가에 수여할 수 있으므로 인덱스 슬라이싱을 통해 2등까지 출력 -> 동메달(3등)을 출력하려 하는데 만약 금메달과 은메달 수상자가 같은 국가라면 그 다음 국가의 최고 점수 획득자 출력(건너뛰기), 그게 아니라면 바로 다음 순위자 출력.
소스코드
n = int(input())
arr = sorted([list(map(int, input().split())) for _ in range(n)], key=lambda x: -x[2])
print(*arr[0][:2])
print(*arr[1][:2])
if arr[0][0] == arr[1][0]:
print(*arr[3][:2])
else:
print(*arr[2][:2])
728x90
반응형
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 2+1 세일 : 11508번 - Python (0) | 2021.07.22 |
---|---|
[백준] 소가 길을 건너간 이유 1 : 14467번 - Python (0) | 2021.07.22 |
[백준] 수 정렬하기 5 : 15688번 - Python (0) | 2021.07.21 |
[백준] 통나무 건너뛰기 : 11497번 - Python (0) | 2021.07.21 |
[백준] 성적 통계 : 5800번 - Python (0) | 2021.07.20 |