minimimi
[백준] 8979 올림픽 본문
반응형
문제출처] 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
반응형
'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글
[1316] 그룹 단어 체커 (0) | 2023.04.01 |
---|---|
[백준] 11659 구간 합 구하기 4 (0) | 2021.10.15 |
[백준] 9184 신나는 함수 실행 (0) | 2021.10.04 |
[백준] 11725 트리의 부모 찾기 (0) | 2021.10.03 |
[백준] 14888 연산자 끼워넣기 (0) | 2021.10.02 |