[Python] 백준 8979번 - 올림픽

유빈·2025년 1월 9일
0

Algorithms

목록 보기
20/35
post-thumbnail

백준 문제집 PS

ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)" (현재 기준 89문제)

이번 방학 2달동안 골드 3까지 다 푸는 것이 목표입니다.

25.01.09 - 실버 5 5문제

문제문제 제목문제 티어문제 링크풀이 링크
11723집합실버 5https://www.acmicpc.net/problem/11723🔗
9655돌 게임실버 5https://www.acmicpc.net/problem/9655🔗
10431줄세우기실버 5https://www.acmicpc.net/problem/10431🔗
8979올림픽실버 5https://www.acmicpc.net/problem/8979🔗
7568덩치실버 5https://www.acmicpc.net/problem/7568🔗


🔗 문제 링크

백준 8979번: 올림픽


⏰ 소요된 시간

15분



🛡️ 난이도

실버 5



✨ 수도 코드

1. 문제 이해

조건

  1. 금메달 수가 더 많은 나라
  2. 금메달 수가 같으면, 은메달 수가 더 많은 나라
  3. 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라

위의 조건에 따라 나라들의 등수를 결정하는 문제이다.

이때 주의해야 하는 것은 공동 등수를 고려해줘야 하는 것이다.
예를 들어 1, 2, 3, 4 나라가 있고 2와 3이 금, 은, 동 개수가 같다. 그러면 1이 1등, 2와 3이 공동 2등이면 4가 3등이 아니고 4등이 된다.


2. 코드 분석

input = open(0).readline

medal = {}
nation_num, wanna_rank = map(int, input().split())

for _ in range(nation_num):
    nation, gold, silver, bronze = map(int, input().split())
    medal[nation] = [gold, silver, bronze]

line = sorted(medal.values(), key=lambda x: (x[0], x[1], x[2]), reverse=True)
print(line.index(medal[wanna_rank])+1)

dictionary인 medal에서 key는 나라의 고유 번호nation이고, value에는 [gold, silver, bronze]를 저장한다.


sorted(medal.values(), key=lambda x: (x[0], x[1], x[2]), reverse=True)

모든 나라들의 메달 정보를 medal에 저장하고 나서 금메달 > 은메달 > 동메달 순서대로 내림차순으로 정렬한다. 금메달인 x[0] 을 기준으로 내림차순으로 정렬하고, 금메달의 수가 같은 경우들 내에서 x[1] 을 기준으로 내림차순으로 정렬한다. 그리고 금메달과 은메달의 수 모두 같은 경우에는 x[2] 을 기준으로 내림차순으로 정렬한다.

유용하게 사용되는 lambda식이므로 기억해두자!


테스트케이스를 통해 정렬되는 방식을 보면 다음과 같다.

찾고자 하는 나라의 번호는 2이다. 메달의 정보에 따라 정렬한 리스트인 line에서 찾고자 하는 나라의 번호에 해당하는 메달 정보 [gold, silver, bronze]의 인덱스를 line에서 찾는다. 그리고 해당 인덱스에 1을 더한 수가 등수이다. (line.index(medal[wanna_rank])+1)

만약 공동 2등을 한 2, 4 나라의 경우에도 line에서 찾게 되는 것은 [0, 2, 0]이므로 앞에 있는 인덱스인 1에 1을 더한 값인 2를 출력하게 된다. 그리고 [0, 0, 2]인 나라 3은 인덱스 3에 1을 더한 값인 4를 출력하게 된다.



profile
🌱

0개의 댓글