import sys
input = sys.stdin.readline
n = int(input())
fin = []
for i in range(n):
b, p, q, r = map(int, input().split())
score = p*q*r
rank = p+q+r
fin.append([b, score, rank])
fin.sort(key=lambda x: (x[1], x[2], x[0]))
for i in range(3):
print(fin[i][0], end=' ')
lambda 매개변수 : 표현식
으로 람다 표현식을 이용해서 점수, 순위합, 등번호 낮은 순으로 정렬해주는 것을 떠올리면 풀 수 있다!
x[1]: 점수가 낮은 순으로 정렬.
x[2]: 점수가 같으면 순위 합이 낮은 순으로 정렬.
x[0]: 점수와 순위 합이 같으면 등번호가 낮은 순으로 정렬.
스포츠 클라이밍은 1986년에 시작된 실내 암벽 등반 스포츠입니다. 선수들은 원래 리드 클라이밍 종목에서만 겨루었는데, 1989년에 스피드 클라이밍이 추가되었고, 10년 후인 1999년에 볼더링 종목이 추가되었습니다. 올림픽 게임에서는 금, 은, 동메달을 결정하기 위해 선수들은 세 종목에서 겨루어 종합 순위를 매깁니다. 종합 순위는 세 종목에서 거둔 순위를 곱한 점수로 결정됩니다. 예를 들어, 어떤 선수가 리드에서 1위, 스피드에서 5위, 볼더링에서 2위를 했다면 점수는 10점이 됩니다. 점수가 낮을수록 순위가 높습니다.
선수 n
명의 등번호와 이들이 세 종목에서 거둔 순위가 주어질 때, 금, 은, 동메달을 받을 선수를 결정하는 프로그램을 작성하세요.
만약 두 선수의 점수가 같다면, 세 종목 순위의 합산 점수가 낮은 선수가 더 높은 순위를 차지합니다.
만약 점수와 순위의 합산 점수가 모두 같다면, 등번호가 낮은 선수가 더 높은 순위를 차지합니다.
n
(3 ≤ n ≤ 100)이 주어집니다. n
개의 줄 각각에 네 정수 b
, p
, q
, r
가 주어집니다. b
: 선수의 등번호 (1 ≤ b ≤ 999, 서로 다름)p
, q
, r
: 해당 선수가 리드, 스피드, 볼더링에서 거둔 순위 (1 ≤ p, q, r ≤ n)금, 은, 동메달을 받을 선수의 등번호를 순서대로 한 줄에 출력하세요.
5
101 1 2 3
102 2 2 2
103 1 1 4
104 1 3 3
105 2 1 3
103 101 105
import sys
input = sys.stdin.readline
n = int(input())
players = []
for _ in range(n):
b, p, q, r = map(int, input().split())
score = p * q * r
sum_rank = p + q + r
players.append((b, score, sum_rank))
b
, 각 종목 순위 p
, q
, r
를 입력받아 점수(score
)와 순위의 합산(sum_rank
)을 계산합니다.players.sort(key=lambda x: (x[1], x[2], x[0]))
x[1]
)가 낮은 순서대로 정렬.x[2]
)이 낮은 순서대로 정렬.x[0]
)가 낮은 순서대로 정렬.for i in range(3):
print(players[i][0], end=' ')
5
101 1 2 3
102 2 2 2
103 1 1 4
104 1 3 3
105 2 1 3
103 101 105