h e 1 1 o !

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž๋ฃŒ๊ตฌ์กฐ / ๋‹ค์ค‘ ํฌ์ธํ„ฐ ํŒจํ„ด ๋ณธ๋ฌธ

a l g o r i t h m

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž๋ฃŒ๊ตฌ์กฐ / ๋‹ค์ค‘ ํฌ์ธํ„ฐ ํŒจํ„ด

hee.hee 2022. 7. 5. 23:35

๐Ÿ“Œ ์ธ๋ฑ์Šค๋‚˜ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” ํฌ์ธํ„ฐ๋‚˜ ๊ฐ’์„ ๋งŒ๋“  ๋‹ค์Œ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ค‘๊ฐ„ ์ง€์ ์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ ์ง€์ ์ด๋‚˜ ๋, ์–‘์ชฝ ์ง€์ ์„ ํ–ฅํ•ด ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ

 

 

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;
}

 

๋งž์•˜๋‹ค. ์˜ˆ์—~~!