선수의 등번호와 각 종목마다의 점수를 받는다. 1,2,3등의 등번호를 출력하면 된다.
우선 순위
1. 세 점수의 곱이 가장 작은 사람
2. 곱이 같다면 세 점수의 합이 작은 사람
3. 둘 다 같다면 등번호가 낮은 사람
이를 참고해서 3명까지 순서대로 등번호를 출력하면 된다. 정렬문제인데 조금 까다롭다. 하지만 실버 5여서 놀랍다. 이 유형을 잘 안풀어봐서 그런 것 같다.
# 백준 23246 Sport Climbing Combined
def comp(x):
return (x[1]*x[2]*x[3], x[1]+x[2]+x[3], x[0])
# 선수 인원수
N = int(input())
# b번호 p, q, r 각종목
info = [list(map(int, input().split())) for _ in range(N)]
# key에 들어가는 함수에서 순서대로 우선순위로 정렬한다.
# comp를 만들어서 쓰는 대신 lambda를 바로 써도 된다.
info = sorted(info, key=comp)
# 3등까지만 출력하면 된다다
for b, p, q, r in info[:3]:
print(b, end=" ")
sorted()함수를 쓰면 된다. 그냥 오름차순의 문제가 아니기 때문에 lambda를 쓰던가 사용자 정의 함수를 써야 한다. 둘다 가능하지만 comp라는 함수를 만들었다.
우선순위 순서대로 식을 넣으면 된다. 곱, 합, 번호 순이다.