https://www.acmicpc.net/problem/8979

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

풀이2

찾아야하는 나라의 성적과 똑같은 성적을 가진 나라를 내림차순으로 찾아서 제일 먼저 찾은 국가의 인덱스 값을 사용하면 된다.

import sys
input = sys.stdin.readline
n, k = map(int, input().split())
score = [list(map(int, input().split())) for _ in range(n)]
score.sort(key = lambda x : (x[1], x[2], x[3]), reverse = True)

for i in range(n):
    if score[i][0] == k:
        target = score[i][1:]
        break

for idx,nation in enumerate(score, 1):
    if target == nation[1:]:
        print(idx)
        break

출력결과

풀이2

찾아야하는 나라의 성적과 똑같은 성적을 가진 나라를 내림차순으로 찾아서 제일 먼저 찾은 국가의 인덱스 값을 사용하면 된다.

대신 앞 풀이와 달리 찾을때 마다 -1 을 해준다.

import sys
input = sys.stdin.readline
n, k = map(int, input().split())
score = [list(map(int, input().split())) for _ in range(n)]
score.sort(key = lambda x : (x[1], x[2], x[3]), reverse = True)

for i, args in enumerate(score, 1):
    if args[0] == k:
        rank = i

target = score[rank-1][1:]
for idx,g,s,b in score:
    if idx == k:
        print(rank)
        break
    elif [g, s, b] == target:
        rank -= 1

출력결과

개발자 성현