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
'자료구조 & 알고리즘 & cs > CodingTest' 카테고리의 다른 글
[python] 1527 - 금민수의 개수 (0) | 2023.07.03 |
---|---|
[python] 프로그래머스 Lv2. - 귤 고르기 (0) | 2023.06.30 |
[python] 3826 - 스타일리시 (0) | 2023.06.23 |
[python] 19948 - 음유시인 영재 (0) | 2023.06.23 |
[python] 4386 - 별자리 만들기 (0) | 2023.06.20 |