Python_알고리즘/Silver V

8979. [Python]올림픽

최근영 2023. 4. 4. 00:35

1. 문제

 

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

 

8979번: 올림픽

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

www.acmicpc.net

 

2. 접근 방법

 

  • 시간 제한: 1초
  • 메모리 제한: 128MB
  • 구현
  • 정렬

 

3. 파이썬 코드

 

N,K = map(int,input().split())

num_list = []
# 나라별 리스트 추가
for _ in range(N):
    country = list(map(int,input().split()))
    num_list.append(country)
# 금, 은, 동 순으로 리스트 정렬
num_list.sort(reverse=True, key=lambda x:(x[1],x[2],x[3]))
# 내가 원하는 나라의 금 은 동 메달 갯수 저장
for i in range(N):
    if num_list[i][0] == K:
        check_list = num_list[i][1:]
# 반복문 순회하며 그 나라의 금, 은, 동 개수가 같은 인덱스값 출력
for j in range(N):
    if num_list[j][1:] == check_list:
        print(j+1)
        break

 

4. 문제를 풀고난 후 생각

 

  • 금, 은, 동 순으로 정렬을 하기 위해서 lambda 를 사용하여 정렬하는 방식을 검색하여 문제를 해결하였다.
  • x[1], x[2], x[3] 금, 은, 동 순으로 정렬을 한 후 내가 원하는 나라(K)와 일치하는 리스트인 경우 그 나라의 금, 은, 동 값을 찾아 변수에 저장해준다.
  • 그 후 그 변수에 저장된 값과 같은 값이 나왔을 때의 인덱스 값을 출력해 주는 방식으로 해결했다.

 

5. 문제를 푸는데 도움이 되는 지식

 

  • lambda 이용한 sort 정렬