Coding Test/Python

[백준/구현&정렬] 8978번: 올림픽 (python, 실버5 )

lim.dev 2024. 3. 12. 23:26

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

 

8979번: 올림픽

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

www.acmicpc.net

아이디어

  • 금메달, 은메달, 동메달 순으로 정렬 후
  • 리스트의 값 만큼 반복
    • 만약 현재 데이터의 금메달, 은메달, 동메달의 갯수가 바로 이전 값과 같다면 grade를 i로
    • 아니라면 i값만 1 증가
    • 현재 국가를 나타내는 정수와 K가 같으면 grade출력 후 반복문 종료

 

전체 코드

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

datas = [[int(x) for x in input().split()] for _ in range(N)]

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

i = 1
grade = 1
pre_gold, pre_silver, pre_bronze = datas[0][1], datas[0][2], datas[0][3]

for n, gold, silver, bronze in datas:
    if pre_gold != gold or pre_silver != silver or pre_bronze != bronze:
        grade = i
        pre_gold, pre_silver, pre_bronze = gold, silver, bronze
    i += 1
    if n == K:
        print(grade)
        break

 

set으로 for문 부분을 최적화 할 수 있을 것 같은데..!! 나중에 도전해봐야겠다!