❓ 문제
https://www.acmicpc.net/problem/7568
7568번: 덩치
우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩
www.acmicpc.net
💡 해결하기
1️⃣
[몸무게, 키] 형식으로 덩치를 입력받아 하나의 리스트 안에 추가한다.
2️⃣
등수는 자신보다 덩치가 큰 사람의 수 + 1이 된다.
덩치가 크다는 뜻은 자신의 키와 몸무게가 모두 다른 사람의 키와 몸무게보다 더 커야 한다는 의미이다.
키와 몸무게 중 하나라도 같거나 작으면 덩치가 크다고 볼 수 없다.
따라서 등수를 구하기 위해서는 자신을 제외한 모든 다른 사람과 키와 몸무게를 비교해야 한다.
(모든 경우의 수를 살펴보는 브루트포스 알고리즘 이용!)
3️⃣
결과를 출력할 때는 입력을 받을 때의 덩치 순서대로 순위를 출력해야 하기 때문에 등수를 저장할 때 입력 순서와 함께 저장해야 한다. (이차원 리스트 이용)
이렇게 하고 난 후 입력 순서를 기준으로 정렬한 후 차례로 등수를 공백 한 칸을 두어 출력하면 된다.
💻 Python으로 코드 작성하기
n = int(input()) # 전체 사람의 수
bodies = [list(map(int, input().split())) for _ in range(n)] # 덩치 입력받기 ([몸무게, 키])
bigger = [] # 본인보다 더 큰 덩치를 가지는 사람의 수를 저장하는 리스트
for i in range(len(bodies)): # 자신보다 더 큰 덩치를 가진 사람이 몇 명인지를 살펴볼 사람 탐색
body = bodies[i]
cnt = 0 # 본인보다 더 큰 덩치를 가지는 사람의 수
for other in bodies: # 비교할 다른 사람을 탐색
if body != other and body[0] < other[0] and body[1] < other[1]: # 현재 other이 본인이 아니고 다른 사람의 키와 몸무게보다 본인의 키와 몸무게가 더 작다면
cnt += 1 # 등수가 하나씩 낮아짐
bigger.append([cnt, i])
bigger.sort(key=lambda x:x[1]) # bigger 리스트를 입력 순서인 i를 기준으로 오름차순 정렬
for item in bigger:
print(item[0] + 1, end=' ') # 등수는 자신보다 더 큰 덩치의 사람의 수 + 1이므로 cnt에 1을 더하여 출력
🙂 돌아보기
처음에 자신보다 덩치가 큰 사람의 수와 다른 사람보다 덩치가 큰 사람의 수를 비교하여 등수를 구하는 것으로 문제를 잘못 이해했었다.
등수는 그냥 자기 자신보다 덩치가 큰 사람 수 그대로 사용하면 되는 것이었다.
문제를 제대로 읽어야겠다고 생각했다.
'코딩 테스트 연습 > 백준 silver' 카테고리의 다른 글
[백준] S4. 등수 구하기 (Python) (0) | 2023.06.18 |
---|---|
[백준] S4. 크로스 컨트리 (Python) (0) | 2023.06.18 |
[백준] S5. 올림픽 (Python) (0) | 2023.06.17 |
[백준] S5. 줄세우기 (Python) (0) | 2023.06.17 |
[백준] S5. 집합 (Python) (0) | 2023.06.17 |
댓글