๐ 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;
}
๋๊ธ