나의 풀이
arr = []
for i in range(n:=int(input())):
arr.append(tuple(map(int, input().split())))
ans = []
for i in range(n):
count = 1
for j in range(n):
if arr[i][1] < arr[j][1] and arr[i][0] < arr[j][0]:
count += 1
ans.append(count)
print(*ans)
고수의 풀이
x,*y=open(0);z=[[*map(int,i.split())]for i in y]
for a,b in z:print(1+sum((a<c)*(b<d)for c,d in z))
CODE REVIEW
- 처음에는 정렬해서 문제를 풀어내려 했다.
arr.sort(lambda=x:(x[0],x[1]))
그렇지만 다시 원래 순서를 고려해주는것도 귀찮고, 몇 번째로 큰지 결정하는 것에도 은근 신경이 쓰였다. - 그래서 그냥 tuple로 (몸무게,키) 정보를 저장하고 각각에 대해서 순위를 결정해주었다.
- 문제 조건에서 제시했듯이, 자신보다 (몸무게,키) 모두 큰 사람이 있으면 count+=1해주면 된다.
-
고수의 풀이를 보면 for문 2개 설정해서 index로 불러오는 것이 아닌,
(a<c)*(b<d)for c,d in z)
처럼 리스트에서 바로 불러와서 사용했다. 이게 더 직관적인 것 같기도…?!