문제 출처
[문제 요약]
몸무게와 키가 각각 x kg와 y cm 라인 어떤 사람이있다고 가정하자. 그 사람의 덩치를 (x, y)로 표현한다고 하면 여러 사람들 덩치가 주어졌을때 등수를 결정해야한다.
등수 결정 방식은 자신보다 더 큰 덩치를 가진 사람의 수로 결정된다.
만약 자신보다 덩치가 큰 사람이 k명이면 그 사람의 덩치 등수는 k+1이 된다.
덩치를 결정할때에 몸무게와 키가 모두 커야 덩치가 크다고 말할 수 있다.
몸무게와 키중 하나가 같아도 몸무게는 한쪽이 크고 키는 다른 쪽이 큰 경우는 덩치가 크다고 할 수 없다.
예를 들어 아래 표와 같이 사람들이 있으면
A보다 덩치가 큰 사람은 E 1명이다. 따라서 덩치 등수는 1+1 = 2이다.
B보다 덩치가 큰 사람은 E 1명이다. 따라서 덩치 등수는 1+1 = 2이다.
C보다 덩치가 큰 사람은 없다. 따라서 덩치 등수는 0+1 = 1이다.
D보다 덩치가 큰 사람은 C, E 2명이다. 따라서 덩치 등수는 2+1 = 3이다.
E보다 덩치가 큰 사람은 없다. 따라서 덩치 등수는 0+1 = 1이다.
F보다 덩치가 큰 사람은 없다. 따라서 덩치 등수는 0+1 = 1이다.
이름 | 몸무게, 키 | 덩치 등수 |
A | 55, 181 | 2 |
B | 54, 181 | 2 |
C | 56, 181 | 1 |
D | 55, 179 | 3 |
E | 56, 182 | 1 |
F | 54, 190 | 1 |
[풀이]
진짜 문제의 정의대로 풀어야한다.
우선 등수를 나타내는 배열을 하나 만든다.
그리고 nested loop을 만든다.
outer loop은 각각 사람이고 inner loop은 (본인은 스킵하고) 배열을 다시 돌리며 나머지 사람들과의 덩치 비교를 한다. 본인보다 크면 본인의 등수 배열 값을 1만큼 증가시킨다.
그리고 inner loop에서 나왔을때 해당 index에 1을 더한다.
[유의할 점]
처음에는 덩치가 제일 큰 순서대로 등수를 매긴다고 오해를 했었다.
위의 예시를 오해하고 아래처럼 풀면 E가 1, C가 2등 나머지는 3등이라고 잘못 푸는 경우가 많다.
A보다 몸무게와 키가 모두 작은 사람이 없다.
B도 없다.
C는 D보다 덩치가 크다.
D보다도 덩치 큰 사람은 없다.
E는 A, B, D보다 덩치가 크다.
F보다 덩치가 큰 사람은 없다.
이렇게 오해하지 않도록 한다.
[파이썬 3 코드]
# -*- coding: utf-8 -*-
def num_big(lst, n):
big = ['0' for i in range(n)]
for i in range(n):
for j in range(n):
if i == j:
continue
else:
if lst[i][0] < lst[j][0] and lst[i][1] < lst[j][1]:
big[i] = str(int(big[i]) + 1)
big[i] = str(int(big[i]) + 1)
return big
if __name__ == "__main__":
n = int(input())
lst = []
for i in range(n):
lst.append(tuple(map(int, input().split())))
res = num_big(lst, n)
# ranks = rank(res, n)
strranks = " ".join(res)
print(strranks)
[백준] 4949 균형잡힌 세상 (Baekjoon Problem 4949: Balanced World) (0) | 2023.09.01 |
---|---|
[백준] 1929 소수 구하기 (Baekjoon Problem 1929: Get Prime Number) (0) | 2023.08.31 |
[백준] 18110 solved.ac (Baekjoon Problem 18110: solved.ac) (0) | 2023.08.18 |
[백준] 11651 좌표 정렬하기 2 (Baekjoon Problem 11651: sort coordinate 2) (0) | 2023.08.18 |
[백준] 10989 수 정렬하기 3 (Baekjoon Problem 10989: Sort 3) (0) | 2023.08.17 |
댓글 영역