- Today
- Total
- νλ‘κ·Έλλ¨Έμ€
- CS
- λ°±μλ
- leetcode
- BFS
- OOP
- database
- 그리λ
- spring
- μμμ λ ¬
- java
- Algorithm
- λ€μ΅μ€νΈλΌ
- μΈν΄
- MST
- 벨λ§ν¬λ
- μ‘Έμ μν
- μλ°
- μλ£κ΅¬μ‘°
- PS
- dp
- Graph
- tree
- λ°μ΄ν°λ² μ΄μ€
- λ¬Έλ²
- ꡬν
- λ°±μ€
- array
- μλ°μμ μ
- pytorch
Partially Committed
[Algorithm] Non-Constructible Value λ³Έλ¬Έ
μ€λ λ€λ£° μ£Όμ λ Non-Constructible Value(Change) μ΄λ€. positive integer λ‘ κ΅¬μ±λ array κ° μ£Όμ΄μ‘μ λ, κ°κ°μ μμλ€μ ν©μΌλ‘ λνλΌ μ μλ μ΅μμ κ°μ Non-Constructible Value λΌκ³ μ μνλ€. μλ₯Ό λ€μ΄, coins λ°°μ΄μ΄ [1, 2, 5] λ‘ μ£Όμ΄μ‘μ λ κ°κ°μ μμλ€λ‘ λ§λ€μ΄λΌ μ μλ κ°μ 1, 2, 3, 5 μ΄λ―λ‘ Non-Constructible Value λ 4 μ΄λ€.
κ°μ₯ λ¨Όμ λ μ¬λ¦΄ μ μλ λ°©λ²μ μ£Όμ΄μ§λλ‘ κΎΈλκΎΈλ ꡬννλ κ²μ΄λ€. μ£Όμ΄μ§ λ°°μ΄μ ascending order μΌλ‘ sorting ν λ€μμ λͺ¨λ μμλ€μ ν©μ ꡬνλ€. κ·Έλ¬λ©΄ Non-Constructive Value λ 1~max_sum+1 μ€ νλμΌ κ²μ΄ μλͺ νλ€. Non-Constructible Value μΈμ§ μλμ§λ₯Ό 1λΆν° μ°¨κ·Όμ°¨κ·Ό κ²μ¬ν΄λκ°λ©΄ λλ€. μ΄λ₯Ό μν λ³μλ₯Ό current_sum μ΄λΌκ³ νμ. κ²μ¬νλ€λ κ²μ μ£Όμ΄μ§ λ°°μ΄μ 1ν μννλ©΄μ, λ°°μ΄ λ΄ μμλ€λ‘ current_sum μ λ§λ€μ΄λΌ μ μλμ§ μλμ§λ₯Ό 체ν¬νλ€λ κ²μ΄λ€. ꡬννκΈ° μ μ μκ° λ³΅μ‘λλ₯Ό κ°λ¨νκ² κ³μ°ν΄λ³΄μμΌ νλ€. outer loop μμ current_sum μ 1 λΆν° max_sum κΉμ§ μ¦κ°μν¬ κ²μ΄κ³ inner loop μμλ given array λ₯Ό μννλ©΄μ Constructible νμ§ μλμ§ νλ¨νλ―λ‘ O(N*M) μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ©° κ³΅κ° λ³΅μ‘λλ O(1) μμ μ μ μλ€. μ΄λ N μ given array μ size μ΄κ³ M μ max_sum μ΄λ€.
current_sum μ΄ Constructible νμ§ μλμ§λ₯Ό νλ¨νλ κ³Όμ μ μ‘°κΈ λ μμΈνκ² μ€λͺ ν΄λ³΄κ² λ€. current_sum λ³΄λ€ μκ±°λ κ°μ μμλ₯Ό λ§μ£Όνλ©΄, current_sum μμ ν΄λΉ μμμ κ°μ λΊλ€. μ΄λ₯Ό λͺ¨λ μμλ€μ λν΄μ λ°λ³΅νλ©΄, current_sum μ΄ 0μ΄κ±°λ 0 λ³΄λ€ ν΄ κ²μ΄λ€. current_sum μ΄ 0μ΄ λμλ€λ κ²μ ν΄λΉ current_sum μ Constructible νλ―λ‘ inner loop λ₯Ό νμΆνλ€. current_sum μ΄ 0λ³΄λ€ ν¬λ€λ κ²μ, current_sum μ΄ Non-Constructible νλ€λ κ²μ΄λ€. μλλ©΄ array λ΄μ μμλ€μ ν©μΌλ‘ current_sum μ λνλΌ μ μκΈ° λλ¬Έμ΄λ€. κ·Έλ¬λ―λ‘ current_sum > 0 μ΄λ©΄, current_sum μ λ°ννλ©΄ λλλ° μ£Όμν μ μ current_sum μ΄ constructible νμ§ μλμ§ νλ¨νλ κ³Όμ μμ current_sum μμ array μ μμλ₯Ό subtract νμΌλ―λ‘, current_sum μ ν΄λΉνλ outer index λ°νν΄μΌ νλ€λ κ²μ΄λ€. λ§μ½ inner loop, outer loop λ₯Ό λͺ¨λ νμΆνκ² λλ©΄ max_sum μ΄νλ‘ Non-constructible Value κ° μλ€λ κ²μ΄λ―λ‘ max_sum+1 μ΄ Non-constructible Value κ° λλ€. μ΄λ₯Ό μ½λλ‘ μμ±νλ©΄ μλμ κ°λ€.
#include <vector>
using namespace std;
// brute - force
// time : O(NM) -> N is # of coins , M is max_sum
// space : O(1)
int nonConstructibleChange(vector<int> coins) {
// Write your code here.
int max_sum = 0;
int current_coin = 0;
int current_sum = 0;
sort(coins.begin(), coins.end());
for (auto ele : coins) {
max_sum += ele;
}
for (int i = 1; i < max_sum; i++) {
current_sum = i;
for (int j = coins.size() - 1; j >= 0; j--) {
current_coin = coins[j];
if (current_coin <= current_sum) {
current_sum -= current_coin;
}
if (current_sum == 0) {
break;
}
}
if (current_sum > 0) {
return i;
}
}
return max_sum+1;
}
μ λ°©λ²μ optimize ν νλμ loop λ§μΌλ‘ ν΄κ²°νλ clever ν νμ΄κ° μ‘΄μ¬νλ€. μμμ λμΌνλ€. μ£Όμ΄μ§ array λ₯Ό ascending order λ‘ sorting ν λ€μμ, current_sum μ 0μΌλ‘ μ΄κΈ°ν νλ€.
μ£Όμ΄μ§ array κ° [1,2,5] λΌλ©΄ ν΄λΉ array λ₯Ό μ λ°©ν₯μΌλ‘ μννλ©΄μ array[i] μ current_sum+1 μ λΉκ΅νλ€. λ§μ½ array[i] > current_sum+1 μ΄λ©΄ current_sum+1 μ Non-Constructible νλ€. μ²μμλ array[0] = 1 κ³Ό current_sum+1 = 1 μ λΉκ΅ν κ²μ΄κ³ , μ¬κΈ°μλ array[0] == current_sum+1 μ΄κΈ° λλ¬Έμ current_sum+1 μ΄ Non-Construtible νμ§λ μμΌλ―λ‘ current_sum μ array[0] μ λν΄μ€λ€. κ·Έλ¬λ©΄ λ€μ λ°λ³΅μμλ array[1] = 2 μ΄κ³ , current_sum+1 = 2 μΈλ° array[1] == current_sum+1 μ΄λ―λ‘ current_sum+1 μ΄ Non-Constructible νμ§ μμΌλ―λ‘ array[1] μ λν΄μ€λ€. λ€μμ array[2] = 5 μ΄κ³ , current_sum+1 μ΄ 4 κ° λκ³ array[2] > current_sum+1 μ΄λ―λ‘ current_sum+1 μ array λ΄μ μμλ€μ ν©μΌλ‘ λνλΌ μ μκ² λλ€. κ·Έλ¬λ―λ‘ current_sum+1 μ λ°νν΄μ£Όλ©΄ λλ€. ν΄λΉ νμ΄λ μ΄κΈ°μ μ λ ¬μ ν΄μΌνλ―λ‘ μκ° λ³΅μ‘λ O(nlogn) μ΄λ©° κ³΅κ° λ³΅μ‘λλ O(1) μ΄λ€. μ½λλ μλμ κ°λ€.
#include <vector>
using namespace std;
// solution2.cpp
// time : O(nlogn)
// space : O(1)
int nonConstructibleChange(vector<int> coins) {
// Write your code here.
sort(coins.begin(), coins.end());
int current_sum = 0;
for (int i = 0; i < coins.size(); i++) {
if (coins[i] > current_sum + 1)
return current_sum + 1;
current_sum += coins[i];
}
return current_sum + 1;
}
μ€μ λ©΄μ μ₯μ΄λ μ½λ©ν μ€νΈλ₯Ό λ³Ό λ, μ΄μ κ°μ΄ ν¨μ¨μ μΈ λ°©λ²μ΄ λ°λ‘ λ μ€λ₯΄μ§ μμ κ°λ₯μ±μ΄ ν΄ κ² κ°λ€. λ©΄μ μ΄λΌλ©΄ brute - force λ°©μμ λ¨Όμ ꡬννλ©΄μ clever ν νμ΄λ‘ κ°λ μμ΄λμ΄λ₯Ό λ©΄μ κ΄μ ν΅ν΄ μ»μ΄λ΄μ ꡬννλ©΄ λ κ² κ°κ³ , μ½λ© ν μ€νΈλΌλ©΄ constraint λ₯Ό μ νμ νκ³ brute-force λ‘ TLE κ° λ°μνμ§ μμκ² κ°μΌλ©΄ κ³ λ―Όνμ§λ§κ³ λ°λ‘ ꡬνν΄μ ν΅κ³Όνλ κ²μ΄ μ’μ κ² κ°λ€.
https://github.com/versatile0010/AlgoExpert
'π₯ Algorithm || λ¬Έμ νμ΄ > PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 1043] κ±°μ§λ§(JAVA) - Union&Find (0) | 2023.01.16 |
---|---|
[Algorithm] Palindrome Check (0) | 2022.10.26 |
[Algorithm] Tournament Winner (0) | 2022.10.25 |
[Algorithm] Sorted squared array λ°ννκΈ° (0) | 2022.10.24 |
[Algorithm] Subsequence νλ³νκΈ° (2) | 2022.10.23 |