๋ฌธ์
n๊ฐ์ ์์ ์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฆฌ์คํธ arr์ ์ ์ target์ ์ฃผ์ด์ก์ ๋ ์ด ์ค์์ ํฉ์ด target์ธ ๋ ์๊ฐ arr์ ์๋์ง ์ฐพ๊ณ , ์์ผ๋ฉด true, ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ solution() ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ์ฝ ์กฐ๊ฑด
- n์ 2 ์ด์ 10,000 ์ดํ์ ์์ฐ์์ ๋๋ค.
- arr์ ๊ฐ ์์๋ 1 ์ด์ 10,000 ์ดํ์ ์์ฐ์์ ๋๋ค.
- arr์ ์์ ์ค ์ค๋ณต๋๋ ์์๋ ์์ต๋๋ค.
- target์ 1 ์ด์ 20,000 ์ดํ์ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์์
arr | target | return |
[1, 2, 3, 4, 5] | 6 | True |
[2, 3, 5, 9] | 10 | False |
ํด๋น ๋ฌธ์ ๋ฅผ ๋ณด๋ฉด ๋ฐ๋ก ๋ ์ฌ๋ฆด์ ์๋ ๋ฐฉ๋ฒ์ ๊ฐ ์์์ ๋ํด ๋ค๋ฅธ ์์๋ค์ ๊ฐ๊ฐ ๋ํด๋ณด๋ฉฐ target์ ๋ง์กฑ์ํค๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์
๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์๊ฐ๋ณต์ก๋๊ฐ O(N²)
์ผ๋ก, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค.
๋์ ํ์ด
- ์๊ฐ๋ณต์ก๋:
O(N)
function solution(arr, target) {
const complementMap = {};
for (let i = 0; i < arr.length; i++) {
const complement = target - arr[i];
if (complement in complementMap) {
return true;
}
complementMap[arr[i]] = i;
}
return false;
}
๋ฐฐ์ด์ ์ํํ๋ฉด์ ๊ฐ ์์์ ๋ํด ๋ชฉํ ํฉ์์ ํ์ฌ ์์๋ฅผ ๋บ ๊ฐ(๋ณด์)์ด ์ด๋ฏธ ํด์ ํ ์ด๋ธ์ ์กด์ฌํ๋์ง ํ์ธํ๊ณ , ์กด์ฌํ์ง ์์ผ๋ฉด ํ์ฌ ์์๋ฅผ ํด์ ํ ์ด๋ธ์ ์ถ๊ฐํฉ๋๋ค.
complementMap[arr[i]] = true; ๋ก ์ ์ฅํด๋ ๋์ผํ๊ฒ ์๋ํ์ง๋ง, ์ฝ๋์ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅ
๋ค๋ฅธ ํ์ด
์์ ์ฝ๋๋ฅผ Map์ ์ด์ฉํด์๋ ๋์ผํ๊ฒ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค.
function solution(arr, target) {
const complementMap = new Map();
for (let i = 0; i < arr.length; i++) {
const complement = target - arr[i];
if (complementMap.has(complement)) {
return true;
}
complementMap.set(arr[i], i);
}
return false;
}
๋ค์๊ณผ ๊ฐ์ด ๊ณ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์๋ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ์๊ฐ๋ณต์ก๋:
O(N + K)
function countSort(arr, k) {
// โ ํด์ ํ
์ด๋ธ ์์ฑ ๋ฐ ์ด๊ธฐํ
const hashtable = new Array(k + 1).fill(0);
for (const num of arr) {
// ํ์ฌ ์์์ ๊ฐ์ด k ์ดํ์ธ ๋์๋ง ์ฒ๋ฆฌ
if (num <= k) {
// ํ์ฌ ์์์ ๊ฐ์ ์ธ๋ฑ์ค๋ก ํด ํด๋น ์ธ๋ฑ์ค์ ํด์ ํ
์ด๋ธ ๊ฐ์ 1๋ก ์ค์
hashtable[num] = 1;
}
}
return hashtable;
}
function solution(arr, target) {
const hashtable = countSort(arr, target);
for (const num of arr) {
const complement = target - num;
// โ target์์ ํ์ฌ ์์๋ฅผ ๋บ ๊ฐ์ด ํด์ ํ
์ด๋ธ์ ์๋์ง ํ์ธ
if (
complement !== num &&
complement >= 0 &&
complement <= target &&
hashtable[complement] === 1
) {
return true;
}
}
return false;
}
Reference
์ฝ๋ฉํ ์คํธ ํฉ๊ฒฉ์๋๊ธฐ: ์๋ฐ์คํฌ๋ฆฝํธ ํธ
'๐ข Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript][Programmers] ์์ฃผํ์ง ๋ชปํ ์ ์ (0) | 2024.09.23 |
---|---|
[Javascript] ๋ฌธ์์ด ํด์ฑ์ ์ด์ฉํ ๊ฒ์ ํจ์ ๋ง๋ค๊ธฐ (0) | 2024.09.23 |
[Javascript][Programmers] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (0) | 2024.08.16 |
[Javascript][Programmers] ์นด๋ ๋ญ์น (0) | 2024.08.16 |
[Javascript][Programmers] ๊ธฐ๋ฅ ๊ฐ๋ฐ (0) | 2024.08.16 |