minimimi

[백준] 8979 올림픽 본문

프로그래밍 공부/알고리즘

[백준] 8979 올림픽

99mini 2021. 11. 4. 00:46
반응형

문제출처] https://www.acmicpc.net/problem/8979


문제요약

sort() 함수를 이용한 정렬 문제

풀이

리스트에서 사용할 수 있는 sort() 함수에서 key= 파라미터를 활용하면 된다.

금메달이 같은 경우 은메달의 개수로 정렬하고 은메달이 같은 경우 동메달로 정렬하면 된다.

case = [[0 for _ in range(4)] for _ in range(n)]
for _ in range(n):
    country, gold, silver, bronze = map(int,input().split())
    case[country-1] = [country,gold,silver,bronze]

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

테스트 리스트에 나라, 금, 은, 동 순으로 입력을 받아 sort() 함수를 이용해주었다.


medals = case[0][1:]
score = 1
count = -1

for c in case:
    if c[1:] == medals:
        count += 1
    else:
        score += (count + 1)
        count = 0
        medals = c[1:]

    if c[0] == k:
        print(score)
        break

동률일 경우를 계산하기 위해 메달의 구성이 같은 경우는 등수(score)에 변화를 주지 않고 count를 하나씩 증가해 주었다. 만약에 메달의 구성이 다른 나라가 등장하면 score += count + 1을 한다.

k를 만나게 되면 score를 프린트해준 뒤 반복문을 나가면 된다.


소스코드는 Python 3으로 작성되었습니다.

import sys

input = sys.stdin.readline

n,k = map(int,input().split())
case = [[0 for _ in range(4)] for _ in range(n)]
for _ in range(n):
    country, gold, silver, bronze = map(int,input().split())
    case[country-1] = [country,gold,silver,bronze]

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

medals = case[0][1:]
score = 1
count = -1

for c in case:
    if c[1:] == medals:
        count += 1
    else:
        score += (count + 1)
        count = 0
        medals = c[1:]

    if c[0] == k:
        print(score)
        break
반응형