[백준_Python] 23246번 - Sport Climbing Combined [실버5]

황준성·2025년 2월 21일
0

BOJ_Python

목록 보기
60/70

문제

문제 이해

선수의 등번호와 각 종목마다의 점수를 받는다. 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라는 함수를 만들었다.

우선순위 순서대로 식을 넣으면 된다. 곱, 합, 번호 순이다.

profile
Make progress

0개의 댓글