백준 #14674 STOP USING MONEY
문제 링크
문제 설명
$i, c, h$가 주어졌을 때 $h/c$가 가장 큰 값을 기준으로 정렬하는 문제. 만약 동일한 값이 있다면 $c$를 기준으로 오름차순 정렬, 또 동일하다면 $i$를 기준으로 오름차순 정렬하기.
코드
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])
풀이
단순 나누기를 해서는 소수점 때문에 무조건 틀릴거라는 예감이 들어서(사실 정답률이 20퍼대인거보면..) functools
의 cmp_to_key
를 사용했다. compare
함수를 문제 그대로 정의해주었다! 이때 주의할 건 앞에있는 인자 기준으로 return
값이 -1
이면 앞으로 1
이면 뒤로보내는 것!
댓글남기기