각각 덩치가 큰 사람의 수를 리스트에 저장해 덩치 등수를 한 번에 출력
peopleNum = int(input())
stats = [tuple(map(int, input().split())) for _ in range(peopleNum)]
biggerCount = [0] * peopleNum # 나보다 덩치가 큰 사람의 수
for first in stats:
for second in stats[stats.index(first)+1:]:
if first[0] > second[0] and first[1] > second[1]:
biggerCount[stats.index(second)] += 1
elif first[0] < second[0] and first[1] < second[1]:
biggerCount[stats.index(first)] += 1
# 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k+1
print(" ".join([str(c+1) for c in biggerCount]))
질문 게시판 반례 적용해봐도 다 되는데 계속 틀렸습니다! 가 떠서 화난 상태에서...
덩치 등수를 한 사람마다 비교가 모두 끝나면 출력하는 방식으로 변경해보았다.
peopleNum = int(input())
stats = [tuple(map(int, input().split())) for _ in range(peopleNum)]
for first in stats:
biggerCount = 0 # 나보다 덩치가 큰 사람의 수
for second in stats:
if first[0] < second[0] and first[1] < second[1]:
biggerCount += 1
# 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k+1
print(biggerCount+1, end=' ')
맞았습니다! 를 받았지만 도저히 두 코드의 논리적 차이가 눈에 보이지 않았다.
그러다 결국 찾아낸 부분...
biggerCount[stats.index(second)] += 1
list의 index 메소드는 가장 처음으로 발견되는 item의 인덱스를 반환한다는 것...ㅠㅠㅠ
중복되는 값이 있으면 계속 제일 왼 쪽에 있는 친구의 카운트만 증가하고 있었던 거다ㅠㅠ
INPUT
5
30 30
50 50
40 20
30 30
20 20
OUTPUT
4 1 2 1 4
ANSWER
2 1 2 2 4
애초에 for first in stats:
부분을 for idx in range(len(stats)):
로만 했어도...
풀이 방법도 엄청 쉬웠는데 찾는 데 오래 걸리고, 이 사소한 디버깅도 오래 걸렸던 문제...