파이썬 문제풀이/구현

백준8979 올림픽 파이썬 풀이

ari0930 2024. 1. 12. 17:49

https://www.acmicpc.net/problem/8979

 

8979번: 올림픽

입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각

www.acmicpc.net

문제 내용

각 국가마다 금 은 동 메달 획득수가 주어지고 우리가 찾고자하는 국가가 몇등인 찾는 문제이다

문제 조건은 

 

입력

첫줄에 국가수 와 찾고자하는 국가

두번째줄 이후 부터는 그 국가의 번호와 메달 획득수를 금 은 동 메달 수로 차례로 나열한다 

 

출력

찾고자하는 국가의 등수를 정수로 출력한

 

문제풀이

1) 모든 국가들에 대한 메달 정보들을 저장하고난후 금은동 메달 순으로 역정렬한다

2)찾고자 하는 국가의 인덱스를 찾는다

3)찾고자 하는 국가의 금은동 메달의 수를 저장한다

4) for문을 이용하여 찾고자 하는 국가까지의 인덱스 번호까지 루프를 돌면서 한개라도 더 많은

    메달을 보유한 국가들을 카운트 한다

5)카운트한 수에다가 +1을 하여 출력한다

 

 

 

코드

n,k=map(int,input().split())

data=[]

#국가들의 정보 입력
for i in range(n):
    a=list(map(int,input().split()))

    data.append(a)
#국가들 전체 정렬 금은동 메달순으로 정렬
data.sort(key=lambda x:(-x[1],-x[2],-x[3],x[0]))
find=0
#찾고자 하는 국가 인덱스 위치 찾기
for i in range(n):
    if data[i][0]==k:
        find=i
        break
#찾고자 하는 국가 메달수 저장
g=data[find][1]
s=data[find][2]
b=data[find][3]
count=0
#찾고자 하는 국가 매달수 보다 더 많은
#메달을 가지고 있는 국가수 체크
for j in range(find):
    check=True

    if data[j][1]>g:
        check=False
    if data[j][2]>s:
        check=False
    if data[j][3]>b:
        check=False
    if check==False:
        count+=1

print(count+1)

 

 

반응형