티스토리 뷰
백준 8979번 올림픽
알고리즘 분류: 정렬
링크: https://www.acmicpc.net/problem/8979
문제
올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다.
- 금메달 수가 더 많은 나라
- 금메달 수가 같으면, 은메달 수가 더 많은 나라
- 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라
각 국가는 1부터 N 사이의 정수로 표현된다. 한 국가의 등수는 (자신보다 더 잘한 나라 수) + 1로 정의된다. 만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다. 예를 들어, 1번 국가가 금메달 1개, 은메달 1개를 얻었고, 2번 국가와 3번 국가가 모두 은메달 1개를 얻었으며, 4번 국가는 메달을 얻지 못하였다면, 1번 국가가 1등, 2번 국가와 3번 국가가 공동 2등, 4번 국가가 4등이 된다. 이 경우 3등은 없다.
각 국가의 금, 은, 동메달 정보를 입력받아서, 어느 국가가 몇 등을 했는지 알려주는 프로그램을 작성하시오.
입력
입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각 국가를 나타내는 정수와 이 국가가 얻은 금, 은, 동메달의 수가 빈칸을 사이에 두고 주어진다. 전체 메달 수의 총합은 1,000,000 이하이다.
출력
출력은 단 한 줄이며, 입력받은 국가 K의 등수를 하나의 정수로 출력한다. 등수는 반드시 문제에서 정의된 방식을 따라야 한다.
문제 파악
실제로 우리가 흔히 매기는 올림픽의 등수도 이런 방식으로 매겨진다.
한 국가의 등수는 (자기보다 잘한 나라 수 + 1)로 매겨지기 때문에 금은동메달이 모두 같은 나라가 있을 경우
공동 순위라고 생각하면 편하다.
크게 어려운 문제는 아니지만 입력받는 방식 때문에 불편하게 풀었다.
다른 사람은 어떻게 풀었는지 모르겠지만 if else문을 많이 넣어서 가독성이 조금 떨어지는 코드일 수도 있다.
코드
# 8979번
n, k = map(int, input().split())
rank_table = []
for _ in range(n):
ranking = list(map(int, input().split()))
if ranking[0] != k:
rank_table.append(ranking)
else:
standard = ranking
count = 1
for i in range(len(rank_table)):
if rank_table[i][1] > standard[1]:
count += 1
elif rank_table[i][1] == standard[1]:
if rank_table[i][2] > standard[2]:
count += 1
elif rank_table[i][2] == standard[2]:
if rank_table[i][3] > standard[3]:
count += 1
print(count)
우리가 알고 싶은 것은 k나라보다 잘하는 나라가 몇 개인지를 알고 싶기 때문에
k나라가 메달을 몇개 땄는지는 rank_table에 추가하지 않고 따로 standard라는 리스트로 빼놨다.
rank_table은 이제 k나라를 제외한 나라들의 성적표가 담겨져있다.
등수는 자신보다 더 잘한 나라 수 + 1 이므로 count를 1로 설정해준다.
k나라보다 금메달이 많을 경우엔 무조건 등수가 높으므로 count를 늘려준다.
만약 금메달 개수가 같다면 은메달의 개수를 비교하고 은메달 개수가 많으면 count를 늘려준다.
만약 금메달 은메달 까지 같다면 동메달의 개수를 비교하고 동메달 개수가 많으면 count를 늘려준다.
금메달 은메달 동메달 개수가 똑같거나 k나라보다 성적이 떨어지는 나라는 고려대상에서 제외한다.
마지막에 k나라보다 성적이 많은 나라가 몇개인지 count를 출력해준다.
'Python 알고리즘' 카테고리의 다른 글
백준 10814번 파이썬 풀이: 나이순 정렬 (0) | 2020.09.06 |
---|---|
백준 10610번 파이썬 풀이: 30 (0) | 2020.09.06 |
백준 1094번 파이썬 풀이: 막대기 (3) | 2020.09.06 |
백준 1010번 파이썬 풀이: 다리 놓기 (0) | 2020.09.06 |
백준 1002번 파이썬 풀이: 터렛 (1) | 2020.09.05 |