Koala - 9기/기초 알고리즘 스터디

[백준/Python] #8979 올림픽

future0610 2023. 2. 5. 23:22

문제

 

 

8979번: 올림픽

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

www.acmicpc.net


Algorithm

2차원 리스트를 key 매개변수를 이용해 문제의 규칙에 따라 정렬한다. 정렬된 리스트 A에서 첫번째 열에 K가 저장되어 있는 행을 찾고 그 행의 위치를 i로 기억해둔다. 그리고 1등부터 N등까지의 등수를 의미하는 리스트 B를 만들고 A는 정렬되어 있기 때문에 K 국가의 등수는 K의 A에서의 행의 위치가 B에서의 위치가 된다. A는 정렬되어 있으므로 모든 메달의 개수가 같은 국가를 찾기 위해서 인접한 행만 비교하면 된다. 만약 이런 경우가 발생한다면 이 위치에 해당하는 B의 위치의 값을 모두 같은 값으로 해주면 되고 이 값을 가능한 한 가장 작은 수로 해준다. 그리고 B에서 원하는 국가 K의 등수를 찾으면 원하는 답이 나온다.

 


 

 

Code

input = __import__('sys').stdin.readline

N, K = map(int, input().split())

country = []
country_list = []
for _ in range(N):
    get = list(map(int, input().split()))
    country.append(get)

country.sort(key = lambda x : [x[1], x[2], x[3]], reverse = True)

idx = None
for i in range(N):
    if country[i][0] == K:
        idx = i
rank = list(range(1, N + 1))

for i in range(N - 1):
    if i == idx:
        continue
    if country[i][1 :] == country[i + 1][1 :]:
        rank[i + 1] = rank[i]
        
print(rank[idx])