๐์ค๋ ๋ฐฐ์ด ๊ฒ
๋ฌธ์ ํด๊ฒฐ ํจํด
๋น๋์ ์ธ๊ธฐ ํจํด(FREQUENCY COUNTERS)
: ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ๋ค์ํ ๊ฐ๊ณผ ๋น๋๋ฅผ ์์ง
์์) same ํจ์์๊ฒ 2๊ฐ์ ๋ฐฐ์ด์ ์ ๋ฌํ๊ณ , ๋๋ฒ์งธ ๋ฐฐ์ด์ ๊ฐ๋ค์ด ์ฒซ ๋ฒ์ฌ ๋ฐฐ์ด์ ์ ๊ณฑ์ ํด๋นํ๋ ๊ฐ์ ๊ฐ์ง๋ฉด true๋ฅผ ๋ฐํ.
same([1, 2, 3], [4, 1, 9]) //true
same([1, 2, 3], [1, 9])//false
same([1, 2, 1], [4, 4, 1]) //false
- ์ค์ฒฉ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
function same(arr1, arr2) {
if(arr1.length !== arr2.length) return false;
for(let i = 0; i < arr1.length; i++) {
let correctIndex = arr2.indexOf(arr1[i] ** 2)
if(correctIndex === -1) return false;
arr2.splice(correctIndex, 1)
}
return true;
}
๋น๋์ ์ธ๊ธฐ ํจํด์ด ์๋๋ผ ์ค์ฒฉ ๋ฃจํ๋ฅผ ์ด์ฉํด์๋ ํ ์ ์๋ค. ํด๋น ์ฝ๋์ ์๊ฐ๋ณต์ก๋๋ O(n^2)์ธ๋ฐ ๊ทธ ์ด์ ๋ indexOf๋ ํ๋์ ๋ฐ๋ณต๋ฌธ์ ๋จ์ถํด์ ํํํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค์ฒฉ๋ฃจํ๋ฅผ ์ฌ์ฉํ ๊ฒ๊ณผ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฐ๋ค.
- ๋น๋์ ์ธ๊ธฐ ํจํด
function same(arr1, arr2) {
if(arr1.length !== arr2.length) return false;
let frequencyCounter1 = {};
let frequencyCounter2 = {};
for(let val of arr1){
frequencyCounter1[val] = (frequencyCounter1[val] || 0) + 1;
}
for(let val of arr2){
frequencyCounter2[val] = (frequencyCounter2[val] || 0) + 1;
}
for(let key in frequencyCounter1) {
if(!(key **2 in frequencyCounter2)) return false;
if(frequencyCounter2[key ** 2] !== frequencyCounter1[key]) return false;
}
return true;
}
์์ ์ฝ๋๋ ๋น๋์ ์ธ๊ธฐ ํจํด, ์ฆ ๊ฐ์ฒด๋ฅผ ํ์ฉํ ์ฝ๋์ด๋ค. ์ค์ฒฉ๋ฃจํ๊ฐ ์์ด์ง ๋์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ด ์ฌ์ฉ๋์๋๋ฐ ๋ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ด ์ค์ ๋ ๊ฐ๋ณ ๋ฃจํ๋ณด๋ค ํจ์ฌ ๋ซ๋ค! ๊ฐ๋ณ ๋ฃจํ๊ฐ 2๊ฐ์ธ ๊ฒฝ์ฐ ๋ง์ฝ n์ด 1000์ด๋ผ๋ฉด 2000๋ฒ์ ๋๋ฉด๋๋๋ฐ ์ค์ฒฉ ๋ฃจํ์ธ ๊ฒฝ์ฐ 1000 * 1000 ๋งํผ ๋์์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ฌ๋งํ๋ฉด ์ค์ฒฉ ๋ฃจํ๋ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค.
์์ ์ฝ๋์ฒ๋ผ ์ ๋ ฅ๊ฐ์ ๋ํด ์กด์ฌ์ฌ๋ถ๋ฟ๋ง ์๋๋ผ ๋น๋์๋ ์ผ์นํด์ผํ๋ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ํ์ฉํด์ ๊ฐ์ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค.
๋ฌธ์ ) ๋ ๊ฐ์ ๋ฌธ์์ด์ ํจ์์ ์ ๋ฌํ์ ๋ ๋ ๋ฌธ์์ด์ด ๋ชจ๋ ์ผ์นํ๋ ๊ธ์๋ฅผ ๊ฐ์ง๋์ง ํ์ธ
function validAnagram(string1, string2){
if(string1.length !== string2.length) return false;
const stringObj = {};
for(let str of string1) {
stringObj[str] = (stringObj[str] || 0) + 1;
}
for(let str of string2) {
if(!stringObj[str]) return false;
--stringObj[str];
}
return true;
}
๋ ๊ฐ์ ๋ฌธ์์ด์ด ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ ์กฐ๊ฑด์ ๋ง์กฑํ ์ ์์ผ๋ฏ๋ก ๋ฐ๋ก false๋ฅผ ๋ฆฌํดํ๋ค.
์ฒซ๋ฒ์งธ ๋ฌธ์์ด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ๊ฐ์ฒด์ ๊ธ์ ๊ฐ์๋ฅผ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ ๋ฌธ์์ด์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฉด์ ํด๋น ๊ฐ์ด ์์์ ์ ์ฅํ ๊ฐ์ฒด์ ์กด์ฌํ๋ฉด -1์ ํด์ค๋ค.
๋ค์ค ํฌ์ธํฐ(MULTIPLE POINTERS)
:์ธ๋ฑ์ค๋ ์์น์ ํด๋นํ๋ ํฌ์ธํฐ๋ ๊ฐ์ ๋ง๋ ๋ค์ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ค๊ฐ ์ง์ ์์๋ถํฐ ์์ ์ง์ ์ด๋ ๋ ์ง์ ์ด๋ ์์ชฝ ์ง์ ์ ํฅํด ์ด๋์ํค๋ ๊ฒ
์์) ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ทจํ๋ sumZero ๋ผ๋ ํจ์๋ฅผ ์์ฑํ๋ค. ์ด ๋ฐฐ์ด์์ ํ ์์ ํฉ์ด 0์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ์ฒซ๋ฒ์งธ ์์ ๋ฐฐ์ด๋ก ๋ฆฌํดํ๋ค. ์๋ ๊ฒฝ์ฐ undefined๋ฅผ ๋ฆฌํดํ๋ค.
โ์ค์ํ ์ ์ ๋ฐฐ์ด์ด ์ ๋ ฌ๋ ์ํ๋ผ๋ ๊ฒ์ด๋คโ
- ์ค์ฒฉ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
function sumZero(arr) {
for(let i = 0; i < arr.length; i++) {
for(let j = i + 1; j<arr.length; j++) {
if(arr[i] + arr[j] === 0) {
return [arr[1], arr[j]];
}
}
}
}
์๊ฐ ๋ณต์ก๋: O(n^2)
๊ณต๊ฐ ๋ณต์ก๋: O(1)
- ๋ค์ค ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
function sumZero(arr) {
let left = 0;
let right = arr.length - 1;
while(left < right) {
let sum = arr[left] + arr[right];
if(sum === 0) {
return [arr[left], arr[right]];
} else if (sum > 0){
right--;
} else {
left++;
}
}
}
์๊ฐ ๋ณต์ก๋: O(n)
๊ณต๊ฐ ๋ณต์ก๋: O(1)
๋ฌธ์ ) countUniqueValues๋ผ๋ ํจ์๋ฅผ ๊ตฌํํ์ฌ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ ๋ฌํ๋ฉด ํด๋น ๋ฐฐ์ด์ ์ค๋ณต์ ์ ์ธํ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์๋ฅผ ๋ฐํํ๋๋ก ํ๋ค.
function countUniqueValues(arr){
let i = 0;
let j = 1;
while(j <= arr.length - 1) {
if(arr[i] !== arr[j]){
i++;
arr[i] = arr[j];
}
j++;
}
return arr.length > 0 ? i+1 : i;
}
ํฌ์ธํฐ๋ฅผ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์งํ์ํค๋๋ก ํ๋ค. i = 0, j= 1์์ ์์ํ๋ฉด์ ๋ง์ฝ i์ j๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ์ค๋ณต๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ i๋ ๊ทธ๋๋ก ๋๊ณ j๋ฅผ +1 ํ๋ค. ๋ง์ฝ ๋ค๋ฅด๋ค๋ฉด i์ +1์ ํ ํ ํ์ฌ ์ธ๋ฑ์ค i์ ๊ฐ์ j์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ฆ, ๊ณ ์ ์ ๊ฐ์ ๋ฐฐ์ด์ ์์ ์ ๋ ฌํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
๋ค์ค ํฌ์ธํฐ ๋ถ๋ถ์ด๋ผ ํด๋น ํจํด์ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์๋๋ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก Set์ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ์ค๋ณต์ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๐ญ๋ฐฐ์ด ์
์ ์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ ์์ฒด์ ๋ค๊ฐ๊ฐ๊ณ ์๋ ๊ฒ ๊ฐ๋ค. ์์ง๊น์ง ๋ค์ด๋ณธ ๋ถ๋ถ๋ ์๊ณ ์์ ์ฝ๋๋ ๋ฌธ์ ๊ฐ ์ฌ์ด ํธ์ด๋ผ ์ดํดํ๋๋ฐ์ ์ด๋ ค์์ ์์ง๋ง ๋ณธ๊ฒฉ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ฐ๊ฒ ๋๋ฉด ์ด๋ ค์ธ ๊ฑฐ๋ผ๋ ๊ฑฑ์ ์ด ๋ ๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋ฌธ์ ํด๊ฒฐํจํด ๋ฑ์ ๋จผ์ ๋ฐฐ์ฐ๊ณ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ํฉ์์ ์ด๋ค ํจํด์ ์จ์ผํ๊ณ , ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ป๊ฒ ํ์ด์ผํ๋์ง ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐฐ์ฐ๋ ๊ธฐ๋ถ์ด ๋ค์ด์ ์ข๋ค. ์์ฌ๋ด์ ์ง๋๋ฅผ ๋นผ๋ ๊ฒ๋ณด๋ค ์ดํด์ ์ค์ ์ ๋ฌ์ ์ค๊ฐ์ ํ์ฃผํ์ง ์๊ณ ์๊ฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ก์์ผ๊ฒ ๋ค.
'์ผ์ > Today I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2023.02.07 (0) | 2023.02.07 |
---|---|
2023.02.06 (0) | 2023.02.07 |
2023.02.01 (0) | 2023.02.01 |
2023.01.31 (0) | 2023.01.31 |
2023.01.04 (0) | 2023.01.04 |