반응형
https://www.acmicpc.net/problem/8979
8979번: 올림픽
입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각
www.acmicpc.net
내 코드
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
rank = []
for i in range(n):
nat, m1, m2, m3 = map(int, input().split())
rank.append((nat,m1,m2,m3))
rank.sort(key = lambda x: (x[1], x[2], x[3]), reverse=True)
idx = [rank[i][0] for i in range(n)].index(k)
for i in range(n):
if rank[idx][1:] == rank[i][1:]:
print(i+1)
break
코드 리뷰
lambda, ranking 세는 문제
백준 문제를 풀다 보면 rank 문제는 자주 접할 수 있다. 이번 문제는 풀던 문제집에 있길래 한번 풀어봤다.
for i in range(n):
nat, m1, m2, m3 = map(int, input().split())
rank.append((nat,m1,m2,m3))
국가별 금, 은, 동메달을 순서대로 입력해서 넣어줄 것이므로, 이렇게 리스트에 차곡차곡 넣어준다.
rank.sort(key = lambda x: (x[1], x[2], x[3]), reverse=True)
그리고 모든 정보가 있는 리스트를 정렬하는데, lambda 함수를 통해서 순서대로 정렬해준다. 문제는 금, 은, 동 순서로 정렬되기를 요구하므로 정렬한다. 그리고 많은 순서대로 정렬을 해야 하기 때문에 반드시 reverse를 해줘야 한다.
idx = [rank[i][0] for i in range(n)].index(k)
이건 정리한 국가별 금은동 리스트에서, 알고싶은 나라인 k의 위치를 index로 집어서 idx에 저장한다. 이 주변 나라와 비교해줄 것이기 때문에 이 과정은 반드시 필요하다.
for i in range(n):
if rank[idx][1:] == rank[i][1:]:
print(i+1)
break
그리고 차례대로 정렬되어 있는 리스트를 하나씩 살펴보면서, 혹시 [1:] (나라를 제외한 금, 은, 동 숫자들) 이 같은 것을 발견한다면 (그 위치)+1 을 해주면 된다. 이유는 리스트는 0부터 시작하지만 요구하는 것은 1부터이기 때문이다. 이렇게 간단하게 구할 수 있는 문제였다.
반응형
'코딩테스트 대비 > 백준(BOJ)' 카테고리의 다른 글
| [Python][백준/BOJ] 20055번 : 컨베이어 벨트 위의 로봇 (0) | 2023.09.25 |
|---|---|
| [Python][백준/BOJ] 14503번 : 로봇 청소기 (0) | 2023.09.23 |
| [Python][백준/BOJ] 13458번 : 시험 감독 (0) | 2023.09.20 |
| [Python][백준/BOJ] 14940번 : 쉬운 최단거리 (0) | 2023.09.20 |
| [Python][백준/BOJ] 2468번 : 안전 영역 (0) | 2023.09.08 |