h e 1 1 o !
์๊ณ ๋ฆฌ์ฆ ์๋ฃ๊ตฌ์กฐ / ๋ค์ค ํฌ์ธํฐ ํจํด ๋ณธ๋ฌธ
๐ ์ธ๋ฑ์ค๋ ์์น์ ํด๋นํ๋ ํฌ์ธํฐ๋ ๊ฐ์ ๋ง๋ ๋ค์ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ค๊ฐ ์ง์ ์์๋ถํฐ ์์ ์ง์ ์ด๋ ๋, ์์ชฝ ์ง์ ์ ํฅํด ์ด๋์ํค๋ ๊ฒ
sumZero
๐ ๋ค์ค ํฌ์ธํฐ ํจํด sumZero O(n)
๋ํด์ 0์ด ๋๋ ๋ ์์๋ฅผ ๊ฐ์ง๋ ๋ฐฐ์ด์ ๋ฆฌํดํ๋ค.
์ธํ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ด๊ณ ์ ๋ ฌ ๋์ด ์์.
sumZero([-3,-2,-1,0,1,2,3]) // [-3, 3]
sumZero([-2,-1,0,1,3]) //undefined
sumZero([1,2,3]) //undefined
๐ ํ์ด ๊ณผ์ ์ถ์ฝ
์ผ์ชฝ ๋๊ณผ ์ค๋ฅธ์ชฝ ๋์์ ๊ฐ์ด๋ฐ๋ก ์ด๋ํ๋ ๋ฐฉ์.
์ ๋ ฌ์ด ๋์ด ์์ผ๋ ์์ชฝ ๋์์๋ถํฐ ์ซ์๋ฅผ ๋ํด์ 0์ธ ๋ ์์๋ฅผ ์ฐพ๋๋ค.
๐ ์์ธํ ํ์ด
left = 0, right = arr.length-1
arr[left], arr[right]๋ arr์ ์์ชฝ ๋ ์ซ์์ด๋ค.
arr[left] + arr[right] ์ด 0์ด๋ผ๋ฉด ๋ ์์๋ฅผ ๋ฆฌํดํ๋ค.
arr[left] + arr[right] ์ด ์์๋ผ๋ฉด right-1,
arr[left] + arr[right] ์ด ์์๋ผ๋ฉด left + 1 ํด์ค๋ค.
๋ํด์ ์์๊ฐ ๋์ค๋ฉด ์ค๋ฅธ์ชฝ ๋ ์ซ์๋ฅผ arr[arr.length-1-1] ๋ก ๋ฐ๊พธ๊ณ ๋ ๋ํ๋ค.
๋ ์์๊ฐ ๋์ค๋ฉด ๋ค์ arr[arr.length-1-1-1],
์์๊ฐ ๋์ค๋ฉด ์ผ์ชฝ ๋ ์ซ์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ ์ฎ๊น(ํฐ ์ซ์๋ก ์ฎ๊น) arr[0+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++;
}
}
}
๐ ์ฐ์ต๋ฌธ์ countUniqueValues
์ ๋ ฅ๋ ๋ฐฐ์ด์ ์ซ์ ์ค ๊ณ ์ ํ ์ซ์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ผ
countUniqueValues([1,2, 2, 2, 3, 3, 4, 4, 5, 5]) // 5
countUniqueValues([0, 0, 5]) //2
countUniqueValues([ ]) // 0
๐ ๋ด๊ฐ ์ด ์ฝ๋
i๋ฅผ ๊ธฐ์ค์ผ๋ก ์์์๋ถํฐ ์ ๋ ฌ. j๊ฐ ๋ฐฐ์ด์ ๋ง์ง๋ง์ ๋ฟ์ ๋, i+1์ ๊ณ ์ ๊ฐ์ ๊ฐ์
arr[0], arr[1] ์์ i, j ํฌ์ธํฐ๊ฐ ์์๋๋ค.
arr์ ๊ธธ์ด ๋งํผ j ++ ํ๋ฉฐ ๋ฐ๋ณตํ๋ค.
arr[i] !== arr[j]์ผ ๋ i++, arr[i]= arr[j]
arr[i] === arr[j] ์ด๋ฉด ๊ทธ๋ฅ ๊ฐ๋ ๊ธธ ๊ฐ (for)
๋ฐ๋ณต๋ฌธ ๋๋๋ฉด ๊ณ ์ ์ซ์๋ง ์ ๋ ฌ๋์ด ์๊ณ , ๋ง์ง๋ง ์ ๋ ฌ ์ซ์์ i ํฌ์ธํฐ๊ฐ ์๋ค.
i+1์ ๊ณ ์ ํ ์ซ์์ ๊ฐ์(i๋ 0๋ถํฐ ์์๋๋๊น ๊ฐ์๋ฅผ ๊ตฌํ๋ ค๋ฉด +1ํ๊ธฐ)
+ ๋น ๋ฐฐ์ด์ด ์ ๋ฌ ๋์ด๋ i+1๋ก 1์ด ๋ฆฌํด๋๊ธฐ ๋๋ฌธ์ ์์ํ ๋ ๋น ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ์ 0์ด ๋ฆฌํด๋๋๋ก ํด์ค๋ค.
function countUniqueValues(arr){
if(arr.length === 0) return 0;
let i = 0;
for(let j = 1; j<arr.length; j++){
if(arr[i] !== arr[j]){
i++;
arr[i] = arr[j];
}
}
return i + 1;
}
๋ง์๋ค. ์์~~!
'a l g o r i t h m' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฌธ์ ํด๊ฒฐ ํจํด / ๋ถํ ๊ณผ ์ ๋ณต (์ด์งํ์ ๋ฐฐ์ฐ๋ฉฐ ์ถ๊ฐ ์์ ) (0) | 2022.07.10 |
---|---|
๋ฌธ์ ํด๊ฒฐ ํจํด / ๊ธฐ์ค์ ๊ฐ ์ด๋ ํจํด (0) | 2022.07.10 |
๋ฌธ์ ํด๊ฒฐ ํจํด 1 / ๋น๋์ ์ธ๊ธฐ ํจํด (0) | 2022.07.04 |
๋ฌธ์ ํด๊ฒฐ ์ ๊ทผ๋ฒ (0) | 2022.07.03 |
13, 14 (0) | 2022.06.15 |