[Python] 백준 7568번: 덩치

Jonie Kwon·2022년 4월 1일
0

문제 : 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)
  • 결국 단순 이중 for문을 사용하여 풀었습니다.
  • 범위 제한먼저 보고 푸는 방법을 정하자ㅠㅠ
profile
메모하는 습관

0개의 댓글