[프로그래머스] 레벨3 (level3) 저울

2020년 06월 18일, 15:00

저울

문제설명

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

저울1

저울추가 담긴 배열 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인 값보다 가져온 값이 크다면 만들수 없는 숫자이다.

  1. 작은 값을 뽑기 위한 weight배열의 정렬
  2. answer+1보다 뽑을 값이 크면 break;
  3. 값이 작으면 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
*/