일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Deep Dive
- frontend
- Python
- 파이썬
- 클로저
- 정렬
- 알고리즘
- 실행 컨텍스트
- let
- BOJ
- Algorithm
- Javascript
- Execution context
- 딥다이브
- 변수
- Queue
- nft
- 블록체인
- Interview
- var
- 함수
- git pull
- 솔리디티
- solidity
- blockchain
- 리액트
- 자바스크립트
- react
- 프로퍼티
- 백준
- Today
- Total
공부하자
[BOJ/Python] 8979. 올림픽 본문
문제
올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다.
- 금메달 수가 더 많은 나라
- 금메달 수가 같으면, 은메달 수가 더 많은 나라
- 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라
각 국가는 1부터 N 사이의 정수로 표현된다. 한 국가의 등수는 (자신보다 더 잘한 나라 수) + 1로 정의된다. 만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다. 예를 들어, 1번 국가가 금메달 1개, 은메달 1개를 얻었고, 2번 국가와 3번 국가가 모두 은메달 1개를 얻었으며, 4번 국가는 메달을 얻지 못하였다면, 1번 국가가 1등, 2번 국가와 3번 국가가 공동 2등, 4번 국가가 4등이 된다. 이 경우 3등은 없다.
각 국가의 금, 은, 동메달 정보를 입력받아서, 어느 국가가 몇 등을 했는지 알려주는 프로그램을 작성하시오.
<입력>
입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각 국가를 나타내는 정수와 이 국가가 얻은 금, 은, 동메달의 수가 빈칸을 사이에 두고 주어진다. 전체 메달 수의 총합은 1,000,000 이하이다.
4 3
1 1 2 0
2 0 1 0
3 0 1 0
4 0 0 1
<출력>
출력은 단 한 줄이며, 입력받은 국가 K의 등수를 하나의 정수로 출력한다. 등수는 반드시 문제에서 정의된 방식을 따라야 한다.
2
<나의 코드>
N, K = map(int,input().split())
data = [list(map(int, input().split())) for _ in range(N)]
rank = 1
for i in range(N):
if data[i][0] == K:
idx = i
for j in range(N):
if data[j][1] > data[idx][1]:
rank += 1
elif data[j][1] == data[idx][1]:
if data[j][2] > data[idx][2]:
rank += 1
elif data[j][2] == data[idx][2]:
if data[j][3] > data[idx][3]:
rank += 1
print(rank)
<REVIEW>
처음에 이 문제 접근을 모든 국가의 랭크를 구해 idx를 이용해 값을 받아오고 싶었다. 하지만 구현하다 보니 너무 복잡해져서 내가 이해를 잘 못하고 계속 코드를 해석하면서 구현하고 있었다. 나는 누가 로직만 봐도 쉽게 이해할 수 있는 코드를 짜고 싶어 다시 한 번 생각을 해보았다. 그러다가 그냥 결과 값을 알고싶은 해당 국가의 rank만 생각하기로 했다. 그렇게 생각하고 주어진 규칙에 따라 구현을 하니 생각보다 문제가 쉽게 풀렸다. 풀이를 하고 다른 사람들은 어떻게 풀었나 구글링을 해봤는데 대다수가 s.sort(key=lambda x : (-x[1], -x[2], -x[3])) 이런식으로 정렬을 먼저 하고 코드를 진행하는 걸 보았다. 1번 인덱스, 2번 인덱스, 3번 인덱스를 내림차순으로 정렬을 한 것 같은데, 아직 정확하게 이해를 하지 못해 내일은 여러 코드를 한 번 살펴보아야 겠다.
<출처>
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ/Python] 10818. 최소, 최대 (0) | 2021.10.25 |
---|---|
[BOJ/Python] 2562. 최댓값 (0) | 2021.10.25 |
[BOJ/Python] 2804. 크로스워드 만들기 (0) | 2021.09.14 |
[BOJ/Python]1159. 농구 경기 (0) | 2021.09.14 |
[BOJ/Python]2847. 게임을 만든 동준이 (0) | 2021.09.10 |