새소식

PS/CodeUp

[CodeUp/4786] 올림픽 (Python)

  • -

Problem : 올림픽 (codeup.kr)

Status : Solved

Time : 00:10:33

 


 

문제 설명

 

더보기

올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다.

그러나, 많은 사람들 이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다.

두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다.

 

1. 금메달 수가 더 많은 나라

2. 금메달 수가 같으면, 은메달 수가 더 많은 나 라

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

 

각 국가는 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의 등수를 하나의 정 수로 출력한다. 등수는 반드시 문제에서 정의된 방식을 따라야 한다.

 


 

풀이

 

'한 국가 K'의 등수를 알고 싶으므로, K보다 앞선 메달을 딴 국가만을 세어 주면 되는 문제. 시간복잡도도 리스트 한 번을 순회하면 되므로 O(N)이 된다.

 

전체 국가의 순위를 출력하는 문제라면 Sort가 필요하겠지만, 이 역시 간단한 편.

 

풀이 코드

import sys

input = sys.stdin.readline

N, K = map(int, input().split())
medal_list = []
for _ in range(N) :
  idx, g, s, b = map(int, input().split())
  if idx == K :
    k_g, k_s, k_b = g, s, b
  else :
    medal_list.append((g, s, b)) 
    
answer = 1
for g, s, b in medal_list :
  if ( g > k_g or
    g == k_g and s > k_s or
    g == k_g and s == k_s and b > k_b
  ):
    answer += 1

print(answer)

 

 

'PS > CodeUp' 카테고리의 다른 글

[CodeUp/2753] 수열의 n번째 항 (Python)  (0) 2022.11.29
[CodeUp/5301] Softmax (Python)  (0) 2022.11.29
[CodeUp/4787] 택배 (Python)  (2) 2022.11.28
[CodeUp/4425] 잠수함 식별(Python)  (0) 2022.11.28
[CodeUp/3515] 사탕 줍기 2 (python)  (0) 2022.11.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.