백준 7586

CHR·2023년 9월 20일
0

Problem Solving

목록 보기
1/1

처음 사용한 방법 (틀렸습니다!)

각각 덩치가 큰 사람의 수를 리스트에 저장해 덩치 등수를 한 번에 출력

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)):로만 했어도...

풀이 방법도 엄청 쉬웠는데 찾는 데 오래 걸리고, 이 사소한 디버깅도 오래 걸렸던 문제...

profile
🍷

0개의 댓글

관련 채용 정보