설명
예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼 때 C와 D는 누구도 상대방보다 더 크다고 말할 수 없다.
예시)
이름 | (몸무게, 키) | 덩치 등수 |
A | (55, 185) | 2 |
B | (58, 183) | 2 |
C | (88, 186) | 1 |
D | (60, 175) | 2 |
E | (46, 155) | 5 |
위 표에서 C보다 더 큰 덩치의 사람이 없으므로 C는 1등이 된다. 그리고 A, B, D 각각의 덩치보다 큰 사람은 C뿐이므로 이들은 모두 2등이 된다. 그리고 E보다 큰 덩치는 A, B, C, D 이렇게 4명이므로 E의 덩치는 5등이 된다. 위 경우에 3등과 4등은 존재하지 않는다. 여러분은 학생 N명의 몸무게와 키가 담긴 입력을 읽어서 각 사람의 덩치 등수를 계산하여 출력해야 한다.
풀이
브루트포스로 풀어야 하는 문제이다. 그러므로 한 사람을 기준으로 나머지 사람들과 모두 한 번씩 비교해야 한다. 아래의 솔루션을 보면서 풀이를 하자면, i가 (55, 185) 기준일 때, 나머지 사람들과 모두 비교해야 하므로 반복문을 한번 더 작성한다. i와 비교한 키와 몸무게가 모두 크면 i의 등수를 +한다. 다 비교했으면 등수를 출력하고 다음 기준으로 변경한다. 그리고 똑같이 모두 비교하면서 등수를 매긴다.
Solution
#13:36 - 14:20
#브루트포스
import sys
input = sys.stdin.readline
N = int(input())
n = []
for _ in range(N):
w, l = map(int, input().split())
n.append((w, l))
for i in n:
rank = 1
for j in n:
if i[0] < j[0] and i[1] < j[1]:
rank += 1
print(rank, end = " ")
난이도 낮은 문제임에도 손쉽게 못 풀었다. 처음엔 몸무게 순대로 정렬한 후에 몸무게를 비교하면서 등수를 매기려고 했으나 나중에 입력한대로 다시 정렬을 해야 하는 문제 때문에 코드가 너무 복잡해져서 다른 방법으로 시도했다. 다른 방법으로 시도를 했으나 시간이 오래 걸려 결국 풀이를 봤다. 브루트포스 문제 연습 필요!
'BOJ 코딩테스트 > Silver' 카테고리의 다른 글
BOJ 2583번 : 영역 구하기 (Python/Silver 1) (0) | 2023.09.22 |
---|---|
BOJ 2468번 : 안전 영역 (Python/Silver 1) (0) | 2023.09.06 |
BOJ 2667번 : 단지번호붙이기 (Python/Silver 1) (0) | 2023.05.16 |
BOJ 2178번 : 미로 탐색 (Python/Silver 1) (1) | 2023.05.13 |
BOJ 15651번 : N과 M (3) (Python/Silver 3) (0) | 2023.05.11 |