:link:문제 링크

[14674 STOP USING MONEY]

:question:문제 설명

$i, c, h$가 주어졌을 때 $h/c$가 가장 큰 값을 기준으로 정렬하는 문제. 만약 동일한 값이 있다면 $c$를 기준으로 오름차순 정렬, 또 동일하다면 $i$를 기준으로 오름차순 정렬하기.

:pencil2:코드

import sys
from functools import cmp_to_key
input = sys.stdin.readline


def compare(x, y):
    v1 = x[2] * y[1]
    v2 = x[1] * y[2]
    if v1 > v2:
        return -1
    elif v1 < v2:
        return 1
    else:
        if x[1] < y[1]:
            return -1
        elif x[1] > y[1]:
            return 1
        else:
            if x[0] < y[0]:
                return -1
            else:
                return 1


N, K = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
arr.sort(key=cmp_to_key(compare))
for i in range(K):
    print(arr[i][0])

:memo:풀이

단순 나누기를 해서는 소수점 때문에 무조건 틀릴거라는 예감이 들어서(사실 정답률이 20퍼대인거보면..) functoolscmp_to_key를 사용했다. compare함수를 문제 그대로 정의해주었다! 이때 주의할 건 앞에있는 인자 기준으로 return값이 -1이면 앞으로 1이면 뒤로보내는 것!

댓글남기기