본문 바로가기

알고리즘/🥇 골드

백준 2437 저울 파이썬 풀이

728x90

난이도 : 골드2

풀이일 : 2404103

https://www.acmicpc.net/problem/2437

 

2437번: 저울

하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓

www.acmicpc.net


문제 캡쳐


아이디어

  • 무게추의 무게만큼, 저울로 잴 수 있는 무게의 수가 늘어난다.
    • 최초 무게 추 1
    • +1 : 1, 2
    • +2 : 1, 2, 3, 4
    • +3 : 1, 2, 3, 4, 5, 6, 7
    • +5 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12  
  • num + 무게추 무게를 반복하다가, num < weight 순간 찾기

전체 풀이코드

import sys

N = int(sys.stdin.readline())
weights = list(map(int, sys.stdin.readline().split()))
weights.sort()

num = 1  # 만들 수 없는 최소 숫자 초기 설정
# 모든 무게추의 무게를 더하며 num < weight 찾기
for weight in weights:
    if num < weight:
        break
    # 만들 수 있는 무게 정보 재할당
    num += weight

print(num)
  • weights : 무게추들의 정보를 저장하는 배열
  • weights.sort : 만들 수 없는 무게가 현재 무게보다 작아지는 순간을 찾기 위해, 각 무게추의 무게를 더하는 로직 전에 정렬해준다.
  • num = 1 : 가지고 있는 무게추로 만들 수 없는 최소 무게는 1부터 시작한다.
  • for 반복문 : 모든 무게추들의 무게에 대해 num과 weight를 비교하고, 현재 만들 수 있는 숫자보다 더 큰 무게가 나타나는 순간, 반복문을 종료한다.
  • 종료되지 않았다면, num에 현재 무게추의 무게를 합산한다.

느낀점

  • 간단한 문제였는데 처음에는 무슨 boolean 배열을 만들려고 시도하다가 이상해서 다시 생각하고 풀었다. 이런 유형의 문제들도 로직을 생각해내지 못해서 그런지 좀 어렵게 느껴진다.