본문 바로가기

백준 문풀

[Python] 구현 - 8979.올림픽(실5) / 다중조건 정렬

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

 

8979번: 올림픽

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

www.acmicpc.net

 

>>문제 포인트

- 금메달, 은메달, 동메달 순 내림차순 정렬

-동점자가 있을 때 rank를 갱신하지 않음 => 인접한 행과의 비교가 필수

ex) 2-3이 동점일때

=> 1등 - 2등 -2등 -4등

 

=> before행과 비교하여 같다면 임시저장소에 포인트를 쌓음

=> before행과 비교하여 같지않다면 rank를 +1하고 누적되어있던 point를 같이 더하고 비워줌

 

>>풀이 코드

#8979

n, k= map(int, input().split())

medal=[]

for _ in range(n):
  a,b,c,d= map(int, input().split())
  medal.append((b,c,d,a))

#금-은-동 순 내림차순 정렬
medal = sorted(medal, key= lambda x: (-x[0], -x[1], -x[2]))

rank=0
point=0 #이전행과 같을 경우 쌓이는 포인트
before= 0 #이전행

for idx, i in enumerate(medal):
  if before==i[:-1]: #만약 이전행과 같다면
    point+=1   #point만 갱신
  else:
    rank+=(point+1) #같지 않으면 누적되어 있는 point와 1을 더함
    point=0     #point 비워주기

  if i[3]==k:       #우리가 찾는 순서라면 => rank출력
    print(rank)
    break
  before= i[:-1]    #이전행 메달정보 갱신