๐ section05 - 1 - ๋ ๋ฐฐ์ด ํฉ์น๊ธฐ
์ด๋ฒ ์น์ ์ ํจ์จ์ฑ์ ๊ณ ๋ คํ๋ ์น์ ์ผ๋ก ํฌ ํฌ์ธํฐ, ์ฌ๋ผ์ด๋ฉ์๋์ฐ, ํด์ฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณธ๋ค.
์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ ํฉ์น๋ ๋ฌธ์ ์ธ๋ฐ, ์ ๋ฒ์ ๋ณํฉ ์ ๋ ฌ(mergeSort) ์ฐ์ตํ๋ค๊ฐ ์ด ๋ฌธ์ ์ ๋น์ทํ ๋ก์ง์ธ ๊ฒ ๊ฐ์์ ๊ทธ๋๋ก ์ ์ฉํ๋ค. ๊ฐ์ฌ๋ ์ฝ๋๋ ๋์ ์ฝ๋์ ์กฐ๊ธ ๋น์ทํ๋ฉด์ ๋ฌ๋๋ค. ๋, ๋ฌธ์ ์์ n
์ ๋ฒ์๊ฐ 100
๊น์ง๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋คํญ์๊ฐ(O(N^2) ์ด์)
๋ด๋ก ํ์ด๋ ๋์ง๋ง, ๋ฒ์๊ฐ ํฐ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ TwoPointer
๋ฅผ ์ฌ์ฉํ์ฌ O(N)
์ผ๋ก ํ์๋ค. ๋๊ฐ์ด ํ ์ ์๋๋ฐ ์ twoPointer
๋ฅผ ์ ํํ๋๊ณ ๋ฌป๋๋ค๋ฉด ๋ง์ฝ, ์ค๋ฌด์์ O(N^2)
์ฝ๋์ O(N)
์ฝ๋๊ฐ ์์ ๋ O(N)
์ฝ๋๋ฅผ ์ ํํ ๊ฒ์์ ์๋ช
ํ๋ค.
๊ฐ์ฌ๋์ ํ์น์ฐ์ฐ์(postfix form)
๋ฅผ ์ฌ์ฉํ์
จ๋๋ฐ, ํ์น์ฐ์ฐ์์ ํน์ง์ ์ฐ์ฐ์๊ฐ ๋ณ์ ๋ค์ ์ฌ ๋ ๊ฐ์ ๋จผ์ ๊ณ์ฐํ๊ณ ์ฆ๊ฐ/๊ฐ์
๊ฐ ์ด๋ฃจ์ด์ง๋ ํํ๋ค. ์ฝ๋๋ฅผ ๊ฐ๋ตํ๊ฒ ์ธ ๋ ์ข์๊ฒ ๊ฐ๋ค. ๋ while
๋ฌธ์ ์กฐ๊ฑด์ &&
๋ก ํด์ค์ผ ๋ ์ค ํ๋๊ฐ false
์ผ ๋ ์ ์ฒด ๋ฐ๋ณต๋ฌธ์ด false
๊ฐ ๋๋๊ฒ๋ ์์ง ๋ง์.
// ๋์์ฝ๋
let n = 4;
let arr1 = [1, 10, 20, 50];
let m = 5;
let arr2 = [3, 6, 10, 20, 25];
console.log(solution(n, arr1, m, arr2));
function solution(n, nArr, m, mArr) {
let p1 = p2 = 0;
let answer = [];
while (n<p1 && m<p2) {
if (nArr[p1] < mArr[p1]) {
answer.push(nArr[p1]);
p1++;
} else {
answer.push(mArr[p2]);
p2++;
}
}
return answer.concat(nArr.slice(p1), mArr.slice(p2));
}
// ๊ฐ์ฌ๋ ์ฝ๋
let n = 4;
let arr1 = [1, 10, 20, 50];
let m = 5;
let arr2 = [3, 6, 10, 20, 25];
console.log(solution(n, arr1, m, arr2));
function solution(n, arr1, m, arr2){
let p1 = p2 = 0;
let answer = [];
while (p1<n && p2<m){
if (arr1[p1] < arr2[p2]) answer.push(arr1[p1++]);
else answer.push(arr2[p2++]);
}
while (p1<n) answer.push(arr1[p1++]);
while (p2<m) answer.push(arr2[p2++]);
return answer;
}
๋๊ธ