๐ section05 - 2 - ๊ณตํต ์์ ๊ตฌํ๊ธฐ
A, B ๋ ๊ฐ์ ์งํฉ์ด ์ฃผ์ด์ง ๋ ๊ณตํต ์์๋ฅผ ์ถ์ถํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ค. ํฌ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ N์ ํฌ๊ธฐ๊ฐ 30,000์ธ๋ฐ, ์ด๋ฅผ O(N^2)์ผ๋ก ํ๊ฒ ๋๋ฉด ์ต์
์ ๊ฒฝ์ฐ 1์ด๋น 9์ต๋ฒ์ ์ฐ์ฐ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ค. ๋ฐ๋ผ์, O(N^2) ๋ณด๋ค ์์ ์๊ฐ ๋ณต์ก๋๋ก ๊ณ์ฐํด์ผ ํ๋ค. ๋ง์ฝ, N์ ๋ฒ์๊ฐ 30,000๋ณด๋ค ๋ ์๋ค๋ฉด O(N^2)์ผ๋ก bruteForce๋ก๋ ํ ์ ์๋ค.bruteForce์ ์ฅ์ ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ์ ํํ ๊ฒฐ๊ด๊ฐ์ด ๋์จ๋ค๋ ์ ์ด๋ค.
//O(N^2), bruteForce
let n = 5;
let arr1 = [1, 3, 9, 5, 2];
let m = 5;
let arr2 = [3, 2, 5, 7, 8];
console.log(solution(n, arr1, m, arr2));
function solution(n, arr1, m, arr2) {
let ans = [];
for (let i = 0; i < n; i++) {
let target = arr1[i];
for (let j = 0; j < m; j++) {
if (target === arr2[j]) ans.push(target);
}
}
ans.sort((a, b) => a - b);
return ans;
}
ํ์ง๋ง, ์ด๋ฒ ์น์
์ด ํจ์จ์ฑ์ ๊ณ ๋ คํ๋ ๋ฌธ์ ์ธ ๋งํผ ํฌ ํฌ์ธํฐ๋ก ํ์ด๋ณด์. ํฌ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด NlogN+N+M ์ฆ, O(NlogN)์ ํ ์ ์๋๋ฐ, ์๊ฐ ๋ด์ ๋ค์ด์ฌ ์ ์๋ค. ํ์ด ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ ๋ฐฐ์ด์ ๊ฐ๊ฐ
sort(nlogn)ํ๋ค. - ํฌ ํฌ์ธํฐ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋
p1,p2๋ฅผ 0์ผ๋ก ์ ์ธํ๋ค. - ๋ง์ฝ,
p2๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ดp1๋ณด๋ค ํฌ๋ฉด ํ์ฌp2๋ค๋ก๋p1๋ณด๋ค ๊ฐ๊ฑฐ๋ ์์ ๊ฐ์ด ์๋ค. ์๋ํ๋ฉด ๋ฐฐ์ด์ ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์p1++์ ํด์ค๋ค. p1===p2์ด๋ฉดans์ ๋ฃ๊ณ ๋ค์ ์ซ์๋ฅผ ๊ฒ์ฌํ๊ธฐ ์ํดp1++,p2++ํด์ค๋ค.p1>p2์ธ ์ํฉ์ด๋ฉดp2++๋ฅผ ํด์ค๋ค.p1ํน์p2๊ฐn๋ณด๋ค ์ปค์ง๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃํ๋ค.(ํ์ชฝ ํ์์ด ๋จผ์ ๋๋๋ฉด ๋ค๋ฅธ ์ชฝ์ ํ์ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.)
// O(NlogN + N + M), Two Pointer
let n = 5;
let arr1 = [1, 3, 9, 5, 2];
let m = 5;
let arr2 = [3, 2, 5, 7, 8];
console.log(solution(n, arr1, m, arr2));
function solution(n, arr1, m, arr2) {
let ans = [];
let p1 = (p2 = 0);
arr1.sort((a, b) => a - b);
arr2.sort((a, b) => a - b);
while (p1 < n && p2 < m) {
if (arr1[p1] === arr2[p2]) {
ans.push(arr1[p1++]);
p2++;
} else if (arr1[p1] < arr2[p2]) p1++;
else p2++;
}
return ans;
}
๋๊ธ