본문 바로가기
백준

[백준]7568. 덩치 문제풀이 (파이썬, python)

by 장인이 2021. 2. 17.

www.acmicpc.net/problem/7568

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net

 위 문제는 사람의 키와 몸무게에 따라서 사람들의 덩치를 순위로 나누고자 하는 문제이다. 이 문제의 요점을 정리해보면,

1. 첫 줄에는 전체 사람수 N, 둘째 줄 부터는 N번 만큼 그 사람의 몸무게와 키를 공백을 하나 둔 채 입력 받는다.

2. 어떤 한 사람이 다른 사람보다 몸무게, 키가 모두 클 시 덩치가 크다고 판단한다.

3. 이가 성립되지 않는다면, 두 사람은 덩치가 같은 것으로 인식된다.

4. 입력 받은 사람들의 덩치 순위를 출력한다. (같으면 같은 수로)

 

<예제 입력, 출력>

1. 문제 해결 방법

 필자는 처음에 이 문제를 너무 복잡하게 접근하였다. 모든 사람들의 몸무게, 키 정보를 지닌 리스트를 만든 후, 덩치 순으로 정렬한 뒤 이를 입력한 순서에 맞추어 출력하고자 하였으나, 그 과정에서 고려하지 못한 경우의 수가 많아 제대로 된 결과 값을 얻지 못하였다. 또한, 너무 비효율적이라는 생각이 들었다.

 그러던 와중, 각각 인물마다 계산하고 출력하는 형식으로 바꾸면 어떨까 하는 생각이 들었다. 인물마다 다른 인물끼리 비교해서 본인보다 덩치가 높다면 +1하는 형식이라면, 예외 사항 없이 깔끔하게 작성할 수 있었다.

 

2. 코드 작성

def size(n:int)-> str:
    ppl = []
    for _ in range(n): # 인원 수 만큼 몸무게, 키 받기
        w, h = map(int, input().split())
        ppl.append((w, h))
    
    result = ''
    for idx, i in enumerate(ppl):
        rank = 1 # 기본 rank는 1로 잡기
        
        for k in ppl:
            if i[0]!=k[0] and i[1]!=k[1]: # 본인이 아닌 경우
                if i[0]<k[0] and i[1]<k[1]: # 본인보다 몸무게/키가 큰 경우
                    rank += 1
        
        result += str(rank)
        if idx != n-1:
            result += ' '
    return result
if __name__ == "__main__":
    n = int(input()) # 총 인원수 입력
    print(size(n))

댓글