입출력 예 설명
문제에 나온 예와 같습니다.
접근법
위의 weight를 정렬시키면 [1, 1, 2, 3, 6, 7, 30]이 됩니다. 앞에서 부터 천천히 더해보면 [1, 1, 2]만을 보았을때 1 + 1 + 2 = 4라면, [1, 1, 2]배열은 1에서부터 4까지의 수를 나타낼 수 있습니다. 즉, 배열에 있는 수를 더해서 나오는 결과값 까지의 수를 모두 나타낼 수 있다는 것을 의미합니다. 한 가지 예를 더 살펴보자면, [1, 1, 2, 3]을 한번 보면, 1 + 1 + 2 + 3 = 7 이기 때문에, [1, 1, 2, 3]은 7까지의 모든 수를 나타낼 수 있습니다. 그렇다면 어떤 경우에 수를 나타낼 수 없다는 것을 알 수 있을까요?
바로 다음 수가 현재 까지 더했던 수보다 클 경우입니다. 위의 예를 이어서 설명하자면 [1, 1, 2, 3, 6, 7] 까지 모든 수를 더하면 1 + 1 + 2 + 3 + 6 + 7 = 20입니다. 따라서 이 수들로 1부터 20까지의 수를 모두 표현할 수 있습니다. 하지만 다음 수는 30이기 때문에 21부터 29까지는 표현할 수가 없습니다.
나의 코드
def solution(weight):
weight.sort()
if weight[0] != 1: return 1
answer = weight[0]
for number in weight:
if answer >= number:
answer += number
else: break
return answer