본문 바로가기
코딩 테스트/백준

[백준] (Python) 7568번: 덩치

by Dev.Andy 2023. 5. 24.

머리말

문제 링크

7568번: 덩치

이 문제를 선택한 이유

  • 구현 문제 연습
  • 반복문과 조건문을 적재적소에 활용하기 위함

 

풀이

  1. 몸무게와 키에 대한 표를 리스트의 요소로서 할당해야 한다.
  2. 여기서 몸무게와 키는 튜플로 묶어서 할당했다.
  3. 리스트의 요소를 반복하면서 현재의 요소를 1등으로 초기화한다.
  4. 자신을 포함한 다른 모든 요소를 비교하면서 자신보다 몸무게도 많이 나가고 키도 큰 사람이 있다면 나의 등수의 숫자의 크기를 늘린다.
  5. 여기서 자기 자신을 포함해도 4번의 조건에 해당하지 않기에 괜찮다.
  6. 4번에서 나온 등수를 공백 단위로 하나하나 출력한다.
# 7568번: 덩치
# 실버 5
# <https://www.acmicpc.net/problem/7568>

# import sys

# sys.stdin = open("input.txt", "r")
# input = sys.stdin.readline

n = int(input())

table = [] # <몸무게,키>에 대한 표 초기화

# 반복문을 돌면서 표를 새로 할당
for _ in range(n):
    x, y = list(map(int, input().split()))
    table.append((x, y))
# print(table) # [(55, 185), (58, 183), (88, 186), (60, 175), (46, 155)]

# 현재 인덱스에 있는 사람의 등수를 1등으로 초기화
# 모든 사람과 비교하면서, 나보다 몸무게도 크고 키도 큰 사람이 있으면 등수 증가
for i in table:
    rank =  1
    for j in table:
        if i[0] < j[0] and i[1] < j[1]:
            rank += 1
    print(rank, end=" ")

 

꼬리말

처음에 무리하게 접근한 풀이

  • 표에서 순위에 맞게 표를 정렬하여 정렬된 표를 만들려고 했다.
  • 이러면 정렬된 표에 여러 변수를 접근하여 등수를 매긴다.
  • 여기까지는 좋았지만, 이것은 정렬된 표에 대한 등수이기에 또다시 원본 표에서 접근해야 하기에 너무 복잡했다.
  • 여러 변수와 반복문을 계속 접근하다 보니 멘붕이 왔다…
n = int(input())

table = [] # <몸무게,키>에 대한 표 초기화

# 반복문을 돌면서 표를 새로 할당
for _ in range(n):
    x, y = list(map(int, input().split()))
    table.append((x, y))
# print(table) # [(55, 185), (58, 183), (88, 186), (60, 175), (46, 155)]

ranked_table = table

for _ in range(n):
    for i in range(n-1):
        if table[i][0] < table[i+1][0] and table[i][1] < table[i+1][1]:
            ranked_table[i], ranked_table[i+1] = ranked_table[i+1], ranked_table[i]

print(ranked_table) # [(88, 186), (55, 185), (58, 183), (60, 175), (46, 155)]

ranks = []
rank = 1
flag = 0
for i in range(n-1):
    if ranked_table[i][0] > ranked_table[i+1][0] and ranked_table[i][1] > ranked_table[i+1][1]:
        ranks.append(rank + flag)
        rank += 1
        flag = 0
    else:
        ranks.append(rank)
        flag += 1

print(ranks)

 

회고

  • 다음에 만약 이번처럼 생각보다 너무 복잡해진다면, 과감히 다른 방식에 대한 접근을 고민해 보자.

댓글