-
[LeetCode] 1798. Maximum Number of Consecutive Values You Can Make알고리즘 문제 풀이 2021. 6. 22. 17:52
문제 출처: https://leetcode.com/problems/maximum-number-of-consecutive-values-you-can-make/
Maximum Number of Consecutive Values You Can Make - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제
소유하고 있는
n
개의 동전을 표현한 길이n
의 배열coins
가 주어진다.coins[i]
는i
th 동전의 값이다.n
개의 코인 중에서 일부를 선택하여, 그들의 합인x
를 만들 수 있다.0
부터 시작하여 주어진coins
를 이용해서 만들 수 있는 연속적인 정수의 수 중 가장 큰 값을 반환하라.동일한 동전을 여러 개 가질 수 있음에 주의하라.
예제
Input: coins = [1,3] Output: 2 Explanation: You can make the following values: - 0: take [] - 1: take [1] You can make 2 consecutive integer values starting from 0.
Input: coins = [1,1,1,4] Output: 8 Explanation: You can make the following values: - 0: take [] - 1: take [1] - 2: take [1,1] - 3: take [1,1,1] - 4: take [4] - 5: take [4,1] - 6: take [4,1,1] - 7: take [4,1,1,1] You can make 8 consecutive integer values starting from 0.
풀이
[0, x]
까지의 숫자를 만들 수 있다고 할 때, 임의의 값v
가 새로 주어지면 만들 수 있는 수의 범위에 대해 생각해보자.v
와x+1
과의 관계를 살펴보면 아래 3가지 경우로 나누어진다.x
가 아닌x+1
과 비교하는 이유는 연속된 수를 만들기 위해서[0, x]
에서 필요한 수는x+1
이기 때문이다.v < (x + 1)
v == (x + 1)
v > (x + 1)
첫 번째 케이스인
v < (x+1)
을 보면,v
에 현재까지 가능한 값을 더하는 것으로[0, v+x]
까지 확장이 가능하다.두 번째 케이스인v == (x+1)
을 보면,v
자체가x+1
이기 때문에 최소한[0, x+1]
까지 확장이 가능하며 나아가[0, v+x]
까지 확장될 수 있다.세 번째 케이스인
v > (x+1)
을 보면,v
가x+1
보다 크기 때문에, 현재 범위에서x+1
을 만들 방도가 존재하지 않는다. 그렇기 때문에 문제의 0을 포함하는 연속된 수 조건을 깨뜨리는 상황이 만들어진다.이제 처음부터 가정했던
[0, x]
에 대해서 생각해보자.최초
[0, 0]
에서 시작하여coins
값에 따라 점차 확장시켜 가는 방법을 생각할 수 있다. 이때coins
의 순서에 대해서 주의해야 한다.coins = [1, 1, 3] [0, 0] => [0, 1] => [0, 2] => [0, 5] coins = [1, 3, 1] [0, 0] => [0, 1] => X
위의 예는 동일한 원소지만 순서가 다른
coins
에서 어떤 결과가 나오는지를 보여준다.[0, 0]
에서 점진적으로 확장하기 위해서는coins
가 오름차순으로 정렬되어 있어야 한다는 것을 유추해볼 수 있다.지금까지의 내용을 코드로 작성하면 다음과 같다.
var foo = function(coins) { coins = coins.sort((a,b) => a - b); let left = 0, right =0; for (let i = 0; i < coins.length; i++) { if (right+1 < coins[i]) { break; } } return right+1; }
Github: 1798.js
opwe37/Algorithm-Study
Contribute to opwe37/Algorithm-Study development by creating an account on GitHub.
github.com
'알고리즘 문제 풀이' 카테고리의 다른 글
[LeetCode] 481. Magical String (0) 2021.06.24 [LeetCode] 1877. Minimize Maximum Pair Sum in Array (0) 2021.06.23 [LeetCode] 1648. Sell Diminishing-Valued Colored Balls (0) 2021.06.21 [LeetCode] 679. 24 Game (0) 2021.06.18 [LeetCode] 1414. Find the Minimum Number of Fibonacci Numbers Whose Sum Is K (0) 2021.06.17