(백준) 8979.올림픽 / with.정렬
문제링크: https://www.acmicpc.net/problem/8979
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
n, k = map(int, sys.stdin.readline().rstrip().split())
b = []
for _ in range (n):
a = list(map(int, sys.stdin.readline().rstrip().split()))
b.append(a)
b.sort(key=lambda x: (-x[1], -x[2], -x[3]))
# print(b)
rank = 1
for i in range(n):
if i > 0 and b[i][1:] == b[i-1][1:]:
pass
else:
rank = i + 1
if b[i][0] == k:
print(rank)
break
풀이
- sort 메서드 안에서 파라미터 값을 동시에 여러개 주고 싶다면 key값을 lambda로 주면됨.
- 왜? 문제에서 금 - 은 - 동 이 많은 순서로 메달을 주라고 했으니까.
- 이 때 리스트 앞에
-
부호를 붙이면,reverse=False
로 준 것처럼 내림차순으로 정렬됨. - 동등한 조건일 때 (특정 메달의 개수가 같을 때)를 잘 처리해줘야 되는 문제임.
- 따라서 반복문을 국가수만큼 돌리는데, 첫번째 국가는 비교 대상이 없으니 제외(i>0)하고, 두번째 국가부터 비교함.
b[1][1:]
b[0][1:]
한 값이 동일하다면 pass하고- 왜? 특정 메달의 개수가 같다는 의미이니 등수가 동일해야됨.
- 그게 아니라면 등수를 재설정한다. (아예 i + 1값으로 갱신함.)
- 그러다 k를 만났다면 rank를 print하고 break.
이게.. 초등학생 문제?
This post is licensed under CC BY 4.0 by the author.