
백준 문제집 PS
ses0028님의 "IT기업 및 대기업 계열사 코테보면서 비슷했던 문제들(지속적으로 업데이트 중)" (현재 기준 89문제)
이번 방학 2달동안 골드 3까지 다 푸는 것이 목표입니다.
25.01.09 - 실버 5 5문제
문제 문제 제목 문제 티어 문제 링크 풀이 링크 11723 집합 실버 5 https://www.acmicpc.net/problem/11723 🔗 9655 돌 게임 실버 5 https://www.acmicpc.net/problem/9655 🔗 10431 줄세우기 실버 5 https://www.acmicpc.net/problem/10431 🔗 8979 올림픽 실버 5 https://www.acmicpc.net/problem/8979 🔗 7568 덩치 실버 5 https://www.acmicpc.net/problem/7568 🔗

15분
실버 5

조건
- 금메달 수가 더 많은 나라
- 금메달 수가 같으면, 은메달 수가 더 많은 나라
- 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라
위의 조건에 따라 나라들의 등수를 결정하는 문제이다.
이때 주의해야 하는 것은 공동 등수를 고려해줘야 하는 것이다.
예를 들어 1, 2, 3, 4 나라가 있고 2와 3이 금, 은, 동 개수가 같다. 그러면 1이 1등, 2와 3이 공동 2등이면 4가 3등이 아니고 4등이 된다.
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를 출력하게 된다.