본문 바로가기

자료구조 & 알고리즘 & cs/CodingTest

[python] 8979- 올림픽

8979번: 올림픽 (acmicpc.net)

 

8979번: 올림픽

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

www.acmicpc.net

 

간단하다고 생각했는데

서브태스크 때문에 상당히 애먹었다..

예제는 다 통과했더라도 여러개의 테스트케이스를 찾고 확인해봐야 할 문제같다.

난이도는 높지 않지만 꼼꼼함을 요구하는 기업 코테 문제와 비슷한 것 같았다.

 

여러번 시도의 흔적..

문제가 됐던 부분은 

동일 등수가 있을 경우와 모든 국가의 메달 수가 0인 경우이다.

 

첫 번째 예제와 같이 동일 등수가 존재할 때 4개의 국가 중 두개의 국가가 2등이라면

그 다음 등수는 3등이 아닌 4등이 된다.

위의 방식을 적용하여 모든 국가의 메달수가 0일 경우

모든 국가의 등수는 1등이다.

 

이를 고려해서 테케를 정말 여러본 돌려서 확인한 뒤에야 통과할 수 있었다. 

휴!

 

# 8979 올림픽
import sys
input = sys.stdin.readline

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

nation=[]
medal=[0]*(n+1)

for _ in range(n):
    lst=list(map(int, input().split()))
    nation.append(lst)
    
nationSorting = sorted(nation, key = lambda x : (-x[1], -x[2], -x[3]))


rank=1
for i in range(len(nationSorting)-1):
    if medal[nationSorting[i][0]] == 0:
        medal[nationSorting[i][0]] = rank
    else:
        rank+=1
    if nationSorting[i][1] > nationSorting[i+1][1]:
        rank+=1
    elif nationSorting[i][1] == nationSorting[i+1][1]:
        if nationSorting[i][2] > nationSorting[i+1][2]:
            rank+=1
        elif nationSorting[i][2] == nationSorting[i+1][2]:
            if nationSorting[i][3] > nationSorting[i+1][3]:
                rank+=1
            else:
                medal[nationSorting[i+1][0]] = medal[nationSorting[i][0]]
                

for i in range(1,len(medal)):
    if medal[i] == 0:
        medal[i] = rank
        break

print(medal[k])

 

그런데 다른 코드를 찾아보니..

엄청나게 코드가 간단했다...

난 왜이렇게 복잡하게 짠걸까 ㅠ

 

정렬한 다음에 조건 처리를 해줘야 한다고 생각했는데..

그냥 정렬한 다음에 인덱스를 구해

위의 조건대로 반환해주면 되는 거였다.

간단하게 생각을 해보자

lst=[]
n,k=map(int,input().split())
for p in range(n):
    a.append(list(map(int,input().split())))
    
lst.sort(key=lambda x:(-x[1],-x[2],-x[3]))
for j in range(n):
    if lst[j][0]==k:
        index=j
for i in range(n):
    if lst[i][1:]== lst[index][1:]:
        print(i+1)
        break

 

 

 

* 모든 코드는 github에서 관리합니다.  seinShin (SEIN SHIN) (github.com)

 

seinShin - Overview

blog : https://bboddorong.tistory.com/. seinShin has 7 repositories available. Follow their code on GitHub.

github.com

 

728x90