백준 7568번 바로가기
나의 풀이 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)처럼 리스트에서 바로 불러와서 사용했다. 이게 더 직관적인 것 같기도…?!