[프로그래머스] 레벨3 (level3) 저울
2020년 06월 18일, 15:00
저울
문제설명
하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 합니다. 이 저울의 양팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같습니다. 또한, 저울의 한쪽에는 저울추들만 놓을 수 있고, 다른 쪽에는 무게를 측정하려는 물건만 올려놓을 수 있습니다.
저울추가 담긴 배열 weight가 매개변수로 주어질 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 return 하도록 solution 함수를 작성해주세요.
예를 들어, 무게가 각각 [3, 1, 6, 2, 7, 30, 1]인 7개의 저울추를 주어졌을 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21입니다.
제한 사항
- 저울추의 개수는 1개 이상 10,000개 이하입니다.
- 각 추의 무게는 1 이상 1,000,000 이하입니다.
입출력 예
weight return [3, 1, 6, 2, 7, 30, 1] 21 입출력 예 설명 문제에 나온 예와 같습니다.
문제풀이
추를 우선 내림차 순으로 배열을하고(오름차도 상관없음) 가장 작은 값부터 가져온다. 그래서 하나씩 뽑아서 더하는데, 만약 answer+1인 값보다 가져온 값이 크다면 만들수 없는 숫자이다.
- 작은 값을 뽑기 위한 weight배열의 정렬
- answer+1보다 뽑을 값이 크면 break;
- 값이 작으면 answer에 더해줌.
function solution(weight) {
var answer = 0;
weight.sort((a, b) => b - a);
answer += weight.pop();
while (weight.length !== 0) {
if (answer + 1 < weight[weight.length - 1]) break;
else answer += weight.pop();
}
return answer + 1;
}
/*
1 1 2 3 6 7
*/