[LeetCode] Make Array Zero by Subtracting Equal Amounts

준규·2022년 11월 25일
0

양의 정수로 이루어진 숫자배열 nums 가 주어질 때 하나의 operation은 다음의 과정을 나타낸다.

  1. nums 의 숫자들 중 0이 아닌 가장 작은 숫자를 x로 정한다.
  2. nums 의 숫자들 중 0이 아닌 모든 숫자에서 x의 값을 뺀다.

operation을 거쳐서 nums의 모든 숫자들이 0이 되기까지의 operation의 수행 횟수를 리턴하면 되는 문제이다.

Example을 보자

문제를 보면 nums 내의 같은 숫자들은 operation 과정을 거치면 결국 같은 숫자가 되는것을 알 수 있다. 또한 다른 값의 두 숫자가 0이 되기 위해서 거치는 operation의 횟수는 다를 수 밖에 없다.

같은 숫자들은 0이 되기까지 operation의 횟수가 같고 다른 숫자는 operation의 횟수가 다르므로 nums 내의 중복되지 않는 숫자의 갯수와 operation의 횟수가 같다는 것을 알 수 있다. (0은 제외)

const minimumOperations = function (nums) {
  let count = 0;
  const set = [...new Set(nums)];

  for (let i = 0; i < set.length; i++) {
    if (set[i] !== 0) {
      count++;
    }
  }

  return count;
};

일단 nums를 중복 값이 없는 배열로 바꿔야 하므로 set을 이용해서 중복이 없는 배열로 바꿔주고

set을 순회하면서 숫자가 0 일때를 제외 하고 중복되지 않는 숫자의 갯수를 리턴해준다.

submit을 해보니

정답이었다!

profile
안녕하세요 :)

0개의 댓글