문제 : https://www.acmicpc.net/problem/7568
import sys
input = sys.stdin.readline
n = int(input())
people = []
# 키, 몸무게 입력받기
for i in range(n):
weight, height = map(int, input().split())
people.append((weight,height,i))
# 내림차순 정렬
people.sort(key=lambda x:(-x[0], -x[1]))
answer = [1]* n
rank = 1
answer[people[0][2]] = 1
for i in range(1, len(people)):
weight, height, index = people[i]
rank += 1
if (weight<people[i-1][0] and height<people[i-1][1]):
answer[index] = rank
else:
answer[index] = answer[people[i-1][2]]
print(*answer)
for문 하나만 써서 하려다가 실패한 코드.
i, i-1끼리만 비교해서 i가 i-2보다 작아도 i-1과 덩치 비교할 수 없을 경우 동일한 rank로 출력
대부분 반례가 다 넘어가서 왜 안되는지 한참 고민했다.
3
11 11
10 12
11 13
# 답 1 2 1
# 출력 1 1 1
import sys
input = sys.stdin.readline
n = int(input())
people = []
for i in range(n):
weight, height = map(int, input().split())
people.append((weight,height,i))
people.sort(key=lambda x:(-x[0], -x[1]))
answer = [1] * n
for i in range(len(people)):
w1, h1, index1 = people[i]
for j in range(len(people)):
w2, h2, index2 = people[j]
# 덩치가 더 큰 사람이 존재할 경우 랭크 늘리기
if w2 < w1 and h2 < h1:
answer[index2] +=1
print(*answer)