- Today
- Total
- μλ°μμ μ
- λ°μ΄ν°λ² μ΄μ€
- μμμ λ ¬
- leetcode
- λ¬Έλ²
- λ€μ΅μ€νΈλΌ
- μ‘Έμ μν
- database
- λ°±μ€
- μλ£κ΅¬μ‘°
- νλ‘κ·Έλλ¨Έμ€
- BFS
- μΈν΄
- OOP
- CS
- ꡬν
- λ°±μλ
- Algorithm
- MST
- tree
- dp
- 벨λ§ν¬λ
- spring
- java
- array
- μλ°
- 그리λ
- PS
- pytorch
- Graph
Partially Committed
[Algorithm] λ°°μ΄ λ΄, νΉμ 쑰건μ λ§μ‘±νλ μμ μ κ²μνκΈ° λ³Έλ¬Έ
[Algorithm] λ°°μ΄ λ΄, νΉμ 쑰건μ λ§μ‘±νλ μμ μ κ²μνκΈ°
WonderJay 2022. 10. 22. 23:07
λ°°μ΄μ΄ μ£Όμ΄μ§κ³ , λ°°μ΄ λ΄μμ νΉμ 쑰건μ λ§μ‘±νλ μμ μμ κ²μνλ λ¬Έμ μν©μ ν΄κ²°νλ λ°©λ²μ λνμ¬ κ³΅λΆν΄λ³΄μ. κ°λ Ή, μ΄λ° μν©μ΄λ€.
- μ ν κΈΈμ΄μ 1 - d array κ° μ£Όμ΄μ‘μ λ, λ μμμ ν©μ΄ targetNum μ΄ λλλ‘ νλ μμ μμ μ°ΎμλΌ.
- μ΄λ ν μ‘°ν©μΌλ‘λ targetNum μ λ§λ€ μ μλ€λ©΄ empty vector μ λ°ννλΌ.
- λ μμμ ν©μ΄ targetNum μ΄ λλλ‘ νλ μμ μμ μ μΌνλ€.
λ©΄μ μμ μ΄ λ¬Έμ λ₯Ό λ¬Όμ΄λ΄€λ€κ³ κ°μ νκ³ , μ°¨κ·Όμ°¨κ·Ό λ Όλ¦¬λ₯Ό μ κ°ν΄λ³΄μ. λ¨Όμ , μμΌλ‘ λ¬Όμ΄λ΄μΌ ν κ²μ μ΄λ μ λμ μκ°κ³Ό λ©λͺ¨λ¦¬λ₯Ό νμ©νλμ§, λΉμ°ν μλ¦¬κ² μ§λ§ μμμ νμ μ integer μΈμ§ κ·Έλ¦¬κ³ 2κ°μ μμμ λν΄μ 쑰건μ λ§μ‘±νλ©΄ λλμ§, λ°νν΄μΌνλ vector λ΄μ μμμ μ λ ¬ μνλ μ΄λ»κ² λμ΄μΌ νλμ§ λ±μ 체ν¬ν΄λ³΄λ κ²μ΄ μ’κ² λ€. μ€ν μκ°κ³Ό λ©λͺ¨λ¦¬μ μ μ½μ΄ μλ μν©μ΄λΌλ©΄, κ°λ¨ν λ°©λ²λΆν° μ μν΄λ³Ό μ μκ² λ€.
첫 λ²μ§Έ λ°©λ²μ μκ° ν¨μ¨μ μ’μ§ μμ νΈμ΄μ§λ§ ꡬνμ΄ κ°λ¨νκ³ , μ΄ν΄νκΈ° μ½λ€.
λ°°μ΄μ 2λ² μννλ€. loop μ μ¬μ©νλ index λ₯Ό i, j λΌκ³ κ°μ νμ. outer loop index κ° i μ΄κ³ inner loop index κ° j μΈ κ²μ΄λ€. κ·Έλ¬λ©΄, array[i] μ λν΄μ μνλ 쑰건μ λ§μ‘±νλ array[j] λ₯Ό κ²μνλ€. array[i] μ array[j] μ ν©μ΄ targetNum μ΄ λλ€λ©΄, {array[i], array[j]} λ₯Ό λ°ννλ€. μ΄ λ°©λ²μ μκ° λ³΅μ‘λκ° O(N^2) μ΄λ©°, κ³΅κ° λ³΅μ‘λλ (1) μ΄λ€.
// Two Number Sum Solution 1
// Time complexity : O(N^2)
// Spae complexity : O(N)
// λ°°μ΄μ 2λ² νμνμ¬, 쑰건μ λ§μ‘±νλ pair μ κ²μΆ
#include <vector>
using namespace std;
// time : O(N^2)
// Space : O(1)
vector<int> twoNumberSum(vector<int> array, int targetSum) {
// Write your code here.
vector<int> ans; int present = 0;
for(int i = 0 ; i < array.size(); i++){
present = array[i];
for(int j = i+1 ; j < array.size(); j++){
if(present + array[j] == targetSum){
return {present, array[j]};
}
}
}
return ans;
}
μ λ°©λ²μ λ³΄λ€ μ΅μ νν μ μκ² λλ μκ΅¬κ° λ€μ΄μ¨λ€λ©΄, λ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ ꡬμν΄μ μκ° λ³΅μ‘λλ₯Ό μ€μ΄λκ° νΉμ κ³΅κ° λ³΅μ‘λλ₯Ό μ‘°κΈ ν¬μν΄μ μκ° λ³΅μ‘λλ₯Ό μ€μ΄λ λ°©μμ΄ μκ² λ€. λ μ€ μ΄λ λ°©ν₯μΌλ‘ μκ°νλ©΄ λ μ§ λ¬Όμ΄λ³΄κ³ , μκ°μ μ§ννμ. μ΄λ λ°©λ²λ μκ΄μλ€κ³ νλ©΄, κ³΅κ° λ³΅μ‘λλ₯Ό ν¬μν΄μ μκ° λ³΅μ‘λλ₯Ό μ¬λ¦¬λ κ²μ΄ λ³΄λ€ μκ°νκΈ° μ¬μ΄ κ² κ°λ€.
λ λ²μ§Έ λ°©λ²μ hash table μ μΆκ°μ μΌλ‘ μ¬μ©ν΄μ κ³΅κ° λ³΅μ‘λλ₯Ό O(N) μΌλ‘ ν¬μνλ λμ μκ° λ³΅μ‘λλ₯Ό O(N) μΌλ‘ optimize νλ κ²μ΄λ€.
λ¨Όμ , array λ΄μ λͺ¨λ μμλ₯Ό hash table μ insert νλ€. κ·Έλ¦¬κ³ array λ₯Ό 1λ²λ§ μννλ©΄μ(loop index λ i), array[i] μ matching μ΄ λλ©΄ μ°λ¦¬κ° λ§μ‘±μν€κ³ μ νλ 쑰건μ ν΅κ³Όν μ μλ μμλ₯Ό hash tabel λ΄μμ μ°Ύλλ€. μ κ²½μ°μλ array[i] + x = targetNum μ΄ λμ΄μΌ νλ―λ‘, x = targetNum - array[i] κ° hash tabel λ΄μ μ‘΄μ¬νλ μ§ μ°Ύμμ€λ€. λ§μ½μ μ‘΄μ¬νλ©΄ {array[i], targetNum - array[i]} μ λ°ννκ³ , μ‘΄μ¬νμ§ μμΌλ©΄ { } μ λ°ννλ€.
// Two Number Sum Soltion 2
// hash table μ μ΄μ©ν νμ΄
#include <vector>
#include <unordered_set>
using namespace std;
// time : O(N) || N is length of array
// Space : O(N)
vector<int> twoNumberSum(vector<int> array, int targetSum) {
// Write your code here.
unordered_set<int> s(array.begin(), array.end()); int candidate=0;
for(auto ele : array){
candidate = targetSum-ele;
if(s.find(candidate)!=s.end() && candidate != ele)
return {ele, targetSum-ele};
}
return {};
}
μΈ λ²μ§Έ λ°©λ²μ 첫 λ²μ§Έ μ¬μ©ν λ°©λ²μ μ΅λν μ΅μ ννμ¬ O(NlogN) μ μκ° λ³΅μ‘λμ , O(1) μ κ³΅κ° λ³΅μ‘λλ‘ ν΄κ²°νλ κ²μ΄λ€. μ²μμ μ£Όμ΄μ§λ λ°°μ΄μ΄ λ§μ½ μ λ ¬λ μνλΌλ©΄, λ°°μ΄μ 첫 μΈλ±μ€λ₯Ό μλ―Ένλ left μ λ°°μ΄μ λ§μ§λ§ μΈλ±μ€λ₯Ό μλ―Ένλ right λ₯Ό μ μΈν λ€μμ left μ right λ₯Ό μ μ ν μμ§μ¬κ°λ©° targetNum μ λ§μ‘±νλ μμ μμ μ°ΎμλΌ μ μλ€. μ΄ λ°©λ²μ μ΅ν ν¬ ν¬μΈν° μκ³ λ¦¬μ¦μ΄λΌκ³ μλ €μ Έ μλ€. Quick-sort λ₯Ό ꡬνν λ μ¬μ©ν idea μ μ‘°κΈ λΉμ·ν λλμ λ°λλ€. (μ¬λ΄μΌλ‘ λμΌν ꡬ쑰λ‘, left, right λ₯Ό κ°±μ ν λ λ§λ€ νμ λ²μκ° μ λ°μ© μ€μ΄λ€κ² λ§λ€λ©΄ κ·Έκ² λ°λ‘ λ°μ΄λ리 μμΉμ΄λ€.)
// Two Number Sum solution3
// Two pointers Algorithm
#include <vector>
#include <algorithm>
using namespace std;
// time : O(NlogN) || N is length of array
// Space : O(1)
vector<int> twoNumberSum(vector<int> array, int targetSum) {
// Write your code here.
sort(array.begin(), array.end()); int current = 0;
int left = 0; int right = array.size()-1;
while(left<right){
current = array[left]+array[right];
if(current == targetSum) return {array[left], array[right]};
else if(current < targetSum){
left++;
}
else if(current > targetSum){
right--;
}
}
return {};
}
https://github.com/versatile0010/AlgoExpert
'π₯ Algorithm || λ¬Έμ νμ΄ > PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Algorithm] Sorted squared array λ°ννκΈ° (0) | 2022.10.24 |
---|---|
[Algorithm] Subsequence νλ³νκΈ° (2) | 2022.10.23 |
[LEETCODE] 496. Next Greater Element I (0) | 2022.10.14 |
[LEETCODE] 1790. Check if One String Swap Can Make Strings Equal (0) | 2022.10.13 |
[LEETCODE] 202. Happy Number (0) | 2022.10.12 |