💻 문제 풀이의 2가지 방법
- 딕셔너리 사용
- 2차원 배열사용
문제에 답이 있다고, 문제 잘 읽으라는 소리를 초등학생부터 들어왔던 것 같은데.. 이 문제가 딱 문제에 해답? 힌트? 가 있는 문제였습니다.
6번째 줄에 자신보다 더 잘한 나라수 + 1 라고 되어있으니, 자신보다 더 잘한 나라수만 체크하면 되겠구나! 라는 아이디어를 문제를 통해 얻었습니다
그리고 조심해야할 부분이자, 처음에 제가 놓쳤던 부분이기도 한데요.
- 동메달이 아무리 많아도 1000개가 있어도, 금메달이 1개 있으면 금메달을 가진 나라가 높은 순위라는 것입니다. 즉, 합산으로 풀 수 없고, 금메달부터 봐야 한다는 거죠
(물론, 메달수 의 총합이 1,000,000 이하로 정해져 있기 때문에 가중치를 두어 합산으로 푸는 경우도 있었습니다!)
어쨌든, 저는 2가지 딕셔너리와, 2차원 배열을 활용하여 풀었습니다.
(튜플로 푸신분도 계시더라고요!)
🎈 딕셔너리
import sys
N, K = map(int, sys.stdin.readline().split())
scores = {}
for i in range(N):
a = list(map(int, sys.stdin.readline().split()))
scores[a[0]] = a[1:]
count = 1
for i in range(1, N+1):
if scores[K][0] < scores[i][0]:
count += 1
elif scores[K][0] == scores[i][0]:
if scores[K][1] < scores[i][1]:
count += 1
elif scores[K][1] == scores[i][1]:
if scores[K][2] < scores[i][2]:
count += 1
print(count)
🎈 2차원 배열
import sys
N, K = map(int, sys.stdin.readline().split())
# 2차원 배열
scores = [[] for _ in range(N+1)]
for _ in range(N):
nation, gold, silver, bronze = map(int, sys.stdin.readline().split())
scores[nation] = [gold, silver, bronze]
K_gold, K_silver, K_bronze = scores[K]
count = 1
# 금, 은, 동 비교해서 K보다 클 경우 +1
for i in range(1, N+1):
if K_gold < scores[i][0]:
count += 1
elif K_gold == scores[i][0]:
if K_silver < scores[i][1]:
count += 1
elif K_silver == scores[i][1]:
if K_bronze < scores[i][2]:
count += 1
print(count)
🎆문제풀 때 어떤 자료형으로 접근할 지를 결정하는 것이 중요하단 것을 배운 문제였습니다!
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 2798번 블랙잭 - 브루트포스 알고리즘, 파이썬 (0) | 2021.02.20 |
---|---|
[백준 알고리즘] 1259. 펠린드롬 수_ 파이썬 (0) | 2021.02.19 |
[백준 알고리즘] 2847. 게임을 만든 동준이 _ 파이썬 (1) | 2021.02.13 |
[백준 알고리즘] 2804. 크로스워드 만들기 _ 파이썬 (0) | 2021.02.13 |
[백준 알고리즘] 2953. 나는 요리사다 _ 파이썬 (0) | 2021.02.13 |