저울 Pgs#43163

저울 PGs#42886

Python 코드 보기
def solution(weight):
    weight.sort()
    answer = 0
    
    print(weight)
    for item in weight:
        if item <= answer+1:
            answer += item
        else:
            break
        
    return answer+1

☝ 입력 형식

  • 저울추가 담긴 배열 weight가 매개변수로 주어집니다.

🤞 출력 형식

  • 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 return 하도록 solution 함수를 작성해주세요.

🤟 구현 과정

1. 알고리즘 정립

이 문제를 풀기 위한 최대 난관은 최대 무게를 구하는 방법을 찾는 것이다.

저울추들을 무게 별로 나열했을 때 n번째 까지의 저울추로 만들 수 있는 무게 중 최대 값을 K(n)이라고 하자.

만약 n번째 저울추까지 이용하여 n번째 까지 저울추의 무게의 합이 되는 무게를 모두 만들 수 있다면, 즉 K(n) = $\sum_{k=1}^n {k}$ 인 동안, n+1번째 저울추의 무게가 K(n)+1보다 작거나 같을 때!

n+1개의 저울추를 이용해서 K(n)+(n+1번째 저울추의 무게) 까지 무게도 만들 수 있다.

말로 하니 복잡하다. 문제의 입출력 예를 예시로 들어보자.

2. 입출력 예를 통한 예시

weight weight.sort() return
[3, 1, 6, 2, 7, 30, 1] [1,1,2,3,6,7,30] 21

이 때, K(n)을 알아보자.

n weight[n] K(n) 해설
0 1 1 1까지 무게 측정 가능
1 1 2 1<=1~K(0)~+1이므로, 1~K(0)~+1까지 모든 무게 측정 가능
2 2 4 2<=2~K(1)~+1이므로, 2~K(1)~+2까지 모든 무게 측정 가능
3 3 7 3<=4~K(2)~+1이므로, 4~K(2)~+3까지 모든 무게 측정 가능
4 6 13 6<=7~K(3)~+1이므로, 7~K(3)~+6까지 모든 무게 측정 가능
5 7 20 7<=13~K(4)~+1이므로, 13~K(4)~+7까지 모든 무게 측정 가능
6 30 20 30<=20~K(5)~+1이 아니므로, 21부터는 측정 불가능.

위의 표를 읽어보면 1번의 설명이 쉽게 이해 될 것이다.

이런 방식을 통해, 입출력 예시의 답도 21이 나온다.

3. 코딩하기

weight를 오름차순으로 정렬한 뒤, 0번째 원소부터 answer에 계속 더해준다.

answer+1이 weight의 다음 원소보다 작을 때, answer+1을 return하면 된다.

댓글남기기