๐Ÿ˜ WeCode Codekata 1์ฃผ์ฐจ ์ •๋ฆฌ!

Solmiiยท2020๋…„ 6์›” 12์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail

์œ„์ฝ”๋“œ 3์ฃผ์ฐจ๋ถ€ํ„ฐ๋Š” ์˜†์ž๋ฆฌ ์ง์ด๋ž‘ ํŽ˜์–ด ์ฝ”๋“œ์นดํƒ€๊ฐ€ ์ง„ํ–‰๋˜์—ˆ๋‹ค!
์ƒ๊ฐ๋ณด๋‹ค ์žฌ๋ฐŒ๊ณ  ์–ด๋ ค์› ๋‹ค.....
๋งค์ผ๋งค์ผ ์ •๋ฆฌํ•˜๊ธด ํ–ˆ๋Š”๋ฐ, ํ•˜๋ฃจ์— ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๊ธด ์• ๋งคํ–ˆ๋˜ ๋ฌธ์ œ๋“ค 1์ฃผ์ผ์น˜๋ฅผ ์ด ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค!


Day 1

ย ย  ๋‚ด ํ’€์ด ย ย 

let numArr = [4, 9, 11, 14];

const twoSum = (nums, target) => {
  for(let i in nums) {
    let j = i + 1;
    for(let j in nums){
      if(nums[i] + nums[j] === target) {
        return [+i, +j];
	    }
	  }
  }
}
twoSum(numArr, 20); // [1, 2]

nums ๋ฐฐ์—ด์˜ index๋ฅผ [i], [j](j = i + 1) ๋กœ ์ง€์ •ํ•ด๋†“๊ณ  ๊ฐ๊ฐ for in ๋ฌธ์„ ๋Œ๋ ธ๋‹ค!

๊ทธ๋Ÿฐ๋ฐ ๋งˆ์ง€๋ง‰์— ๋ฐฐ์—ด์ด string ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค......ใ… 

[1, 2] ๊ฐ€ ๋ฐ˜ํ™˜๋˜์•ผ ํ•˜๋Š”๋ฐ, ["1", "2"] ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ....

์ž„์‹œ๋ฐฉํŽธ(?)์œผ๋กœ + ๋กœ number type์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธด ํ–ˆ์œผ๋‚˜....

๋นˆ ๋ฐฐ์—ด์— push ํ•ด์คฌ์–ด์•ผ ํ•˜๋Š”๊ฑด์ง€? ํ—ท๊ฐˆ๋ฆฐ๋‹น๐Ÿ˜ž

for in ์ž์ฒด๊ฐ€ string์œผ๋กœ ๋ฑ‰์–ด๋‚ธ๋‹ค๊ณ  ํ•จ!

ย ย  ์„ ๊ฒฝ๋‹˜ ํ’€์ด ย ย 

let numArr = [4, 9, 11, 14];

const twoSum = (nums, target) => {
  let resultArr = [];
  for (let i in nums) {
    let findNum = Math.abs(target - nums[i]);
    if (nums.indexOf(findNum) !== -1) {
      resultArr.push(Number(i), nums.indexOf(findNum));
      return resultArr;
    } 
  }
}
twoSum(numArr, 20); // [1, 2]

์„ ๊ฒฝ๋‹˜ ํ’€์ด๋Š” indexOf ๋ฅผ ์ด์šฉํ•ด์„œ i ๊ฐ’์ด๋ž‘ indexOf(findNum) ์„ ๋น„๊ต,

๊ทธ ํ›„์— ๋นˆ ๋ฐฐ์—ด resultArr ์— ํ‘ธ์‰ฌํ•˜๊ณ , resultArr ๋ฅผ return ํ•˜์…จ๋‹น

Math.abs ๋ผ๋˜๊ฐ€...? ๋ชจ๋ฅด๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์ž”๋œฉ๐Ÿ˜‚

๊ฐ์ž ๋”ฐ๋กœ ํ‘ผ๊ฑด ์•„๋‹Œ๋ฐ, ์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€๊ฒŒ ๋จใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

ย ย  model solution ย ย 

function twoSum(nums, target) {
  for (let i = 0; i < nums.length-1; i++) {
    for (let j = i+1; j < nums.length; j++) {
       if (nums[i] + nums[j] === target) {
         return [i, j];
       }
    }
  }
}

๊ทธ๋ƒฅ for ๋ฌธ ์“ฐ๋‹ˆ๊นŒ ์ž˜ ๋‚˜์˜ค๋„ค!?

console.log(typeof(i)); ํ•ด๋ณด๋‹ˆ๊นŒ ๋‚ด ํ’€์ด๋Š” string์œผ๋กœ ๋‚˜์˜ค๊ณ  ๋ชจ๋ธ ์†”๋ฃจ์…˜์€ number๋กœ ๋‚˜์˜จ๋‹ค.....

์™œ๊ทธ๋Ÿฌ์ง€? for in ๋ฌธ์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด string์ด ๋˜๋Š” ๊ฑด๊ฐ€....?

์œผ์•™ ์ดํ•ด ์•ˆ๊ฐ€ใ… ใ… ใ… ใ… ใ… ใ… ใ… ใ… 

for in ์ž์ฒด๊ฐ€ string์œผ๋กœ ๋ฑ‰์–ด๋‚ธ๋‹ค๊ณ  ํ•จ!


Day 2

ย ย  ์„ ๊ฒฝ๋‹˜ ํ’€์ด (๋‚ด ์ง€๋ถ„ ์ชผ๋”....๐Ÿ˜…) ย ย 

const reverse = x => {
  let returnNum = parseInt(x.toString().split("").reverse().join(""));
  return x >= 0 ? returnNum : -returnNum;
}

reverse(-1234); // -4321

string ๋’ค์ง‘๋Š” ๊ฑด ์›๋ž˜ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค!

split("").reverse().join("")

(๊ณต์‹ ์™ธ์šฐ๋“ฏ์ด ์ค„์ค„ ๋‚˜์™”์Œใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์ด๊ฒŒ ๋‚ด ์ง€๋ถ„ ๋...!!)

x ๋ฅผ toString ์œผ๋กœ ๋ฌธ์ž์—ด ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ์—, ๋‚˜์˜จ ๊ฐ’์„ parseInt ๋กœ ์ˆซ์ž ํƒ€์ž…์œผ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑธ returnNum ๋ณ€์ˆ˜์— ์ง€์ •ํ•ด ์ฃผ๊ณ ...!

์ฒ˜์Œ์— ๋“ค์–ด์˜จ x ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด... ์ฆ‰, ์Œ์ˆ˜์ด๋ฉด! -returnNum ์œผ๋กœ ์Œ์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊น”๋”ํ•˜๊ฒŒ 3์ค„ ์ปท!!

ย ย  model solution ย ย 

function reverse(x) {
  let minus = false;
  
  if (x < 0) {
      x *= -1;
      minus = true;
  }
  
  let numText = x.toString();
  let result = '';
  
  for (let i = numText.length-1; i >= 0; i--) {
      result += numText[i];
  }
  
  result = minus ? result * -1 : Number(result);
  
  return result;
}

ํฌํ—‰.....ใ…‹ ๋ญ”๋ง.....?

์ผ๋‹จ....... x๊ฐ€ ์Œ์ˆ˜๋ฉด - ์„ ๊ณฑํ•ด์„œ ์ผ๋‹จ ์–‘์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์ฃผ๊ณ .....(์•„๋ž˜์ค„์—์„œ for ๋ฌธ ๋Œ๋ ค์„œ ๋นˆ๋ฐฐ์—ด์— ์ด์ค˜์•ผ ํ•˜๋‹ˆ๊นŒ)
์Œ์ˆ˜์ธ๊ฑธ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด minus ๊ฐ’์„ true๋กœ ์ค€๋‹ค.

x๊ฐ€ ์–‘์ˆ˜๋ฉด toString ์œผ๋กœ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ์— for ๋ฌธ์„ ๋Œ๋ ค์„œ numText ์˜ index ๊ฐ’์„ ๋‹ค ๋น„๊ตํ•ด์„œ result ๋ผ๋Š” ๋นˆ ๋ฐฐ์—ด์— ํ•˜๋‚˜์”ฉ ๋„ฃ์–ด์ค€๋‹ค.

๊ทธ๋ž˜์„œ ์ตœ์ข…์ ์œผ๋กœ minus ๊ฐ’์ด true ์ด๋ฉด -1์„ ๊ณฑํ•ด์ฃผ๊ณ , ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ number ํƒ€์ž…์œผ๋กœ return ํ•ด์ค€๋‹ค.

์™€ ํ•ด์„ํ•˜๋Š”๋ฐ ์€๊ทผ ํž˜๋“ค์—ˆ๋‹น;; ์†”์งํžˆ ์ด๋ ‡๊ฒŒ ์“ธ ์ผ์€ ์—†์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ,

์Œ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด boolean ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๋Š” minus ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๋Š”๊ฑด ์‹ ๋ฐ•ํ–ˆ๋‹น. ๋‹ค๋ฅธ ๋ฐ์—๋„ ์œ ์šฉํ•˜๊ฒŒ ์ž˜ ์“ธ ์ˆ˜ ์žˆ์„๋“ฏ!!


Day 3

ย ย  ์ฒซ๋ฒˆ์งธ ํ’€์ด ย ย 

const getLengthOfStr = str => {
  let strArr = [];
  let compare = 0;
  for(let i in str) {
    if (strArr.indexOf(str[i]) === -1) {
      strArr.push(str[i]);
    } else {
        if(compare < strArr.length) {
          compare = strArr.length;
        }
        strArr.splice(0, strArr.length);
        strArr.push(str[i]);
      }
    }
  return Math.max(strArr.length, compare);
  }

getLengthOfStr("abcdefghcijklmnop"); // 9

strArr ๋ผ๋Š” ๋นˆ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ , ๊ทธ ๋ฐฐ์—ด ์•ˆ์— ์ธ์ž๋กœ ๋„˜์–ด์˜จ str[i]์˜ indexOf ๊ฐ€ -1์ด๋ฉด = ์ฆ‰, strArr ์•ˆ์— str[i] ๊ฐ€ ์—†์œผ๋ฉด! ๋ฐ”๋กœ push ํ•œ๋‹ค!

๋งŒ์•ฝ, ์žˆ์œผ๋ฉด! ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž ๋ผ๋ฆฌ์˜ ๊ธธ์ด๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์„ ์–ธํ•ด๋‘” compare ์™€, ํ˜„์žฌ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” strArr ์˜ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•ด์„œ, compare ๊ฐ€ ๋” ์ž‘์€ ๊ฒฝ์šฐ, compare์— strArr ์˜ ๊ธธ์ด๋ฅผ ์ €์žฅํ•ด๋‘”๋‹ค.

(์ž„์‹œ์ €์žฅ ๊ฐ™์€ ๋Š๋‚Œ!)

์ €์žฅ ํ›„์—๋Š” strArr ์˜ ํ•ด๋‹น ๋ฌธ์ž๊นŒ์ง€๋ฅผ ์ž˜๋ผ๋‚ธ ํ›„, str[i] ๋ฅผ ๋‹ค์‹œ push ํ•œ๋‹ค.

โ‡’ strArr ๋Š” ์ž„์‹œ์ €์žฅ ํ›„ ํ•œ ์ฐจ๋ก€ ๋น„์›Œ์กŒ์œผ๋‹ˆ๊นŒ, ๋‹ค์‹œ str[i] ๋ฅผ ์ €์žฅํ•ด์„œ ๋‹ค์Œ๋ฒˆ ๋ฌธ์ž์™€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด!!

์ด๋ ‡๊ฒŒ ํ’€๊ณ  submit ํ–ˆ๋Š”๋ฐ......

๋‹ค๋ฅธ ๊ฒฝ์šฐ๋Š” ๋‹ค ํ†ต๊ณผ์ธ๋ฐ, ๋‹ค์Œ์˜ ๊ฒฝ์šฐ์— ์งฑ๋‚˜๋Š” ๋นจ๊ฐ„์ƒ‰์ด ๋œฌ๋‹ค.....๐Ÿ˜ญ

๋ญ๊ฐ€ ๋ฌธ์ œ๋ƒ๋ฉดใ… ใ… 

์ธ์ž๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ž๊ฐ€ abcdefghcijklmnop ์ธ ๊ฒฝ์šฐ, ์—ฌ๊ธฐ์„œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž ์ค‘ ์ œ์ผ ๊ธด ๋ฌธ์ž๋Š”, ์•ž์˜ abc ๋ฅผ ์ œ์™ธํ•˜๊ณ , defghcijklmnop ์ด๋‹ค!

๊ทธ๋Ÿฐ๋ฐ, ๋‚ด๊ฐ€ ํ‘ผ ๋ฐฉ๋ฒ•์€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ์—ด ํ™•์ธ ํ›„ ํ•˜๋‚˜์”ฉ ์ œ๊ฑฐํ•ด๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ ‡๊ฒŒ ์ค‘๋ณต๋ฌธ์ž๊ฐ€ ์ค‘๊ฐ„์— ๋‘ ๊ฐœ ์ธ ๊ฒฝ์šฐ, 2๋ฒˆ์งธ ์ค‘๋ณต๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒใ… ใ… 

์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ ํ•œ์ฐธ์„ ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ ๊ฒฐ๊ตญ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œใ… ใ… 

๊ทธ๋ƒฅ ์—ญ์ˆœ์œผ๋กœ ํ•œ๋ฒˆ ๋” ๋Œ์•˜๋‹น...

ย ย  ๋‘๋ฒˆ์งธ ํ’€์ด ย ย 

const getLengthOfStr = str => {
  let strArr = [];
  let compare = 0;
  for(let i in str) {
    if (strArr.indexOf(str[i]) === -1) {
      strArr.push(str[i]);
    } else {
        if(compare < strArr.length) {
          compare = strArr.length;
        }
        strArr.splice(0, strArr.length);
        strArr.push(str[i]);
      }
    }
  for(let i = str.length-1; i>=0; i--) {
    if (strArr.indexOf(str[i]) === -1) {
      strArr.push(str[i]);
    } else {
        if(compare < strArr.length) {
          compare = strArr.length;
        }
        strArr.splice(0, strArr.length);
        strArr.push(str[i]);
      }
    }
  return Math.max(strArr.length, compare);
  }

getLengthOfStr("abcdefghcijklmnop"); // 14

ใ…Žใ…Žใ…Žใ…Ž ๋น„ํšจ์œจ์˜ ๊ทน์น˜ ใ…Žใ…Žใ…Ž

ย ย  model solution ย ย 

function getLengthOfStr(s) {
  let strArr = [];
  let prevStrArr = [];
  for (let i = 0; i < s.length; i++) {
    let ss = s.slice(i, i + 1);
    for (let j = 0; j < strArr.length; j++) {
      if (ss === strArr[j]) {
        if (prevStrArr.length < strArr.length) {
          prevStrArr = strArr.slice();
        }
        strArr = strArr.splice(j + 1, strArr.length);
        break;
      }
    }
    strArr.push(ss);
  }
  return Math.max(strArr.length, prevStrArr.length);
}
console.log(getLengthOfStr('taaaytts'));

์Œ.....๋ˆ„๊ตฌ ํ•ด์„ํ•ด์ฃผ์‹ค ๋ถ„....?


Day 4

ย ย  ๋‚ด ํ’€์ด ย ย 

const sameReverse = num => {
  let reverseNum = num.toString().split("").reverse().join("");
  return num.toString() === reverseNum ? true : false;
}

sameReverse(1221); // true

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์™„์ „ ์‰ฌ์› ๋‹ค!! ๊ฑฐ์˜ 10์ดˆ์ปท ํ•œ๋“ฏ?

Day 2 ๋ฌธ์ œ๋ž‘ ์™„์ „ ๋˜‘๊ฐ™์•˜๋‹น, ๋งˆ์ง€๋ง‰์— true / false return ํ•˜๋Š”๊ฒƒ๋งŒ ๋‹ค๋ฅด๊ณ !!

๊ทธ๋ž˜์„œ ๋” ์“ธ๊ฒŒ ์—†๋‹น..... ๊ทธ๋ƒฅ Day 2 ํ•จ์ˆ˜ ๊ทธ๋Œ€๋กœ ๊ฐ–๋‹ค์ผ์Œใ…Ž....

ย ย  model solution ย ย 


function sameReverse(num) {
  let xStrArr = (num + '').split('');
  let strLength = xStrArr.length;
  let arr = [];
  
  for (let i = 0; i < strLength; i++) {
      arr.push(xStrArr.pop());
  } 
  // console.log(Number(arr.join('')))
  return num === Number(arr.join(''));
}

console.log(sameReverse(1234567887654321));

์œผํ ! ๊ธธ๋‹ค...!
์ผ๋‹จ, number๋ฅผ string์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„์— split ์œผ๋กœ ์ชผ๊ฐœ๋†“์€ ๋…€์„์€ xStrArr ๋กœ ์„ ์–ธํ•ด๋†“๊ณ ,
์ด xStrArr ์˜ ๊ธธ์ด๋ฅผ strLength ๋กœ ์„ ์–ธ!
๊ทธ๋ฆฌ๊ณ  ๋นˆ ๋ฐฐ์—ด๋„ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ๋†“๊ณ  for ๋ฌธ์„ ๋Œ๋ฆฌ๋„ค!

๋นˆ ๋ฐฐ์—ด์— xStrArr ์˜ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ pop ์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค.

๐Ÿค”pop์€ ๋ฐฐ์—ด์˜ ์š”์†Œ ์‚ญ์ œํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ๋ฐ? ๋„ฃ์–ด์ค€๋‹ค๊ณ ?
๋งž๋‹ค. pop ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ทธ๋Ÿผ pop ๋ฉ”์„œ๋“œ๋กœ ์‚ญ์ œ๋œ ์š”์†Œ๋Š” ์–ด๋””์— ๊ฐˆ๊นŒ?
๋ธ”๋กœ๊ทธ์— ์ž ๊น ์ •๋ฆฌํ•œ ์ ์ด ์žˆ๋Š”๋ฐ... ์ด ์š”์†Œ๋“ค์€ ์ฆ๋ฐœํ•˜๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค!
์ปดํ“จํ„ฐ์˜ ํœด์ง€ํ†ต์„ ์ƒ๊ฐํ•˜๋ฉด ๋จ! ํœด์ง€ํ†ต์— ๋“ค์–ด๊ฐ„ ์•„์ด๋“ค์€ ํœด์ง€ํ†ต ๋น„์šฐ๊ธฐ ๋ฅผ ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ์€ ๋‹ค์‹œ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ๋“ฏ์ด, pop ์œผ๋กœ ์ œ๊ฑฐ๋œ ์š”์†Œ๋„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋นˆ ๋ฐฐ์—ด์— xStrArr ์˜ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ pop ์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค.

์ฆ‰, xStrArr ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ pop์œผ๋กœ ์ œ๊ฑฐํ•œ ํ›„์—, ์ œ๊ฑฐํ•œ ๋…€์„๋“ค์„ ๋นˆ ๋ฐฐ์—ด arr์— ํ•˜๋‚˜์”ฉ push ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
push ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๋งจ ๋’ค์— ์ฐจ๊ณก์ฐจ๊ณก ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—.....

array = [1, 2, 3, 4] ๋ผ๋Š” ๋ฐฐ์—ด์„ pop -> push ํ•˜๋ฉด `array2 = [4, 3, 2, 1] ์ด ๋˜๋Š”๊ฒƒ!!

๊ทธ๋ฆฌ๊ณ  num์ด ๋’ค์ง‘ํžŒ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด arr ์„ join ์œผ๋กœ ํ•˜๋‚˜์˜ string์œผ๋กœ ๋ฐ”๊ฟ”์ค€ ํ›„์— Number ํƒ€์ž…์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

์ตœ์ข…์ ์œผ๋กœ num === Number(arr.join('')); ๋ผ๋Š” ์กฐ๊ฑด ์ž์ฒด๋ฅผ return ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ’์€ true, false ๋กœ ๋‚˜์˜ค๊ฒŒ ๋งˆ๋ฌด๋ฆฌ!

boolean ํƒ€์ž…์„ returnํ• ๋•Œ ์ข€ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆฐ๋‹น....
ํ•ญ์ƒ return true / false ๋กœ ์ง€์ •ํ•ด๋ฒ„๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ....
์‚ฌ์‹ค ์œ„์˜ ๋‚ด ํ’€์ด์—์„œ๋„ใ… 
return num.toString() === reverseNum; ์ด๋ ‡๊ฒŒ๋งŒ ํ–ˆ์–ด๋„ true / false ๋กœ ๋ฐ˜ํ™˜๋๋Š”๋ฐ ๊ตณ์ด ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋กœ ์กฐ๊ฑด์„ ๋„ฃ์–ด์คฌ๋‹น....๐Ÿ˜ฑ


Day 5

ย ย  ๋‚ด ํ’€์ด ย ย 

const getPrefix = strs => {
  let prefix = strs[0];
  if(strs.length < 1) {
    return '';
  }
  for(let i = 1; i < strs.length; i++) {
    for(let j = 0; j < prefix.length; j++) {
      if(strs[i][j] !== prefix[j]) {
        prefix = strs[i].slice(0, j);
      }
    }
  }
  return prefix;
}
let strs = ['start', 'stair', 'step'];
console.log(getPrefix(strs)); // 'st'

ํ•œ์‹œ๊ฐ„ ๊ผฌ๋ฐ• ๋‹ค ์“ด ๋ฌธ์ œ.......๐Ÿ˜‚

์šฐ์„ , prefix ๋ผ๋Š” ๋ณ€์ˆ˜์— strs[0] ์„ ํ• ๋‹นํ•œ๋‹ค!
์–˜๋ฅผ ์ด์šฉํ•ด์„œ strs ๋ฐฐ์—ด์˜ ๋‡จ์†๋“ค์„ ๋‹ค ๋น„๊ตํ• ๊ฑฐ๋‹ค! prefix ๋Š” ํ˜„์žฌ start ์ธ ์ƒํƒœ!

strs.length๊ฐ€ 0์ผ๋•Œ '' return ์„ ๋จผ์ € ์กฐ๊ฑด ๊ฑธ์–ด ๋†“๊ณ ! for๋ฌธ์„ ์ด์ค‘์œผ๋กœ ๋Œ๋ฆฐ๋‹น!
์™œ๋ƒ? strs ์˜ [0], [1], [2]...๋ฒˆ์งธ ๋ฐฐ์—ด์„ ์ญ‰ ํ›‘์–ด์•ผ ํ•˜๋Š”๋ฐ,
ํ›‘์„๋•Œ ๋‹ค์‹œ strs [0][0]...[0][1]...[0][2]... ์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ์˜ ์•ŒํŒŒํŽซ ๋ผ๋ฆฌ ๋˜ ๋น„๊ตํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—!

๊ทธ๋ž˜์„œ ์ด์ค‘ for ๋ฌธ ์•ˆ์—, strs[i][j] !== prefix[j] ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ๊ฑด๋‹ค!

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ strs[0] ์€ ํ˜„์žฌ prefix ๋‹ˆ๊นŒ(๊ฐ™์€ start๋‹ˆ๊นŒ)
for ๋ฌธ ๋Œ๋ฆด๋•Œ i๋ฅผ 1 ์„ ์–ธํ•˜๊ณ  ๋Œ๋ ค์คฌ๋‹ค.

strs ๋ฐฐ์—ด ์•ˆ์˜ [i] ๋ฒˆ์งธ string ์•ˆ์— [j] ๋ฒˆ์งธ ์•ŒํŒŒ๋ฒณ์ด๋ž‘! ์ฒ˜์Œ์— ๋ณ€์ˆ˜ ์„ ์–ธํ•œ prefix = start ์˜ [j]๋ฒˆ์งธ ์•ŒํŒŒ๋ฒณ๋ผ๋ฆฌ ๋น„๊ตํ•œ๋‹ค!

์ฒ˜์Œ์—๋Š” === ์œผ๋กœ ๊ฐ™์€ ๊ฐ’์„ ๋นˆ ๋ฐฐ์—ด์— push ํ•˜๋Š”๊ฑฐ๋กœ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์ฒ˜์Œ์— strs[0] ์ด๋ž‘ strs[1] ๋งŒ ๋Œ์•„๋„ ๋„ˆ๋ฌด ๋งŽ์€ ๊ฐ’์ด push ๋˜์–ด ๋ฒ„๋ ค์„œ.....ใ„ทใ„ทใ„ท

๊ทธ๋ƒฅ === ๋Š” ์ œ์™ธํ•˜๊ณ , !== ์ผ๋•Œ, ์ฆ‰, ๊ฐ ์•ŒํŒŒ๋ฒณ ๊ฐ’์ด ๋‹ค๋ฅผ๋•Œ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ๊ฑธ์—ˆ์Œ!

๊ทธ๋ž˜์„œ, ์ด๋ ‡๊ฒŒ ์กฐ๊ฑด์ด ๋‹ฌ๋ผ์กŒ์„ ๋•Œ ํ˜„์žฌ start ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” prefix ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ์ •์˜ํ•ด์ค€๋‹ค.

์–ด๋–ป๊ฒŒ!? strs[i] = ํ˜„์žฌ ์กฐ๊ฑด์— ๊ฑธ๋ฆฐ strs์˜ ์š”์†Œ๋ฅผ
.slice(0, j); = ์ชผ๊ฐ ๋‹ค! 0๋ฒˆ์งธ ๊ธ€์ž๋ถ€ํ„ฐ j๋ฒˆ์งธ ๊ธ€์ž ๊นŒ์ง€! (j๋ฒˆ์€ ์ค‘๋ณต๋˜์ง€ ์•Š์€ ๊ธ€์ž๋‹ˆ๊นŒ!!)

๊ฒฐ๊ตญ ํ˜„์žฌ prefix ์—๋Š” strs[i][j] ๋ž‘ prefix[j] ์ค‘์— ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ž๋งŒ ๋“ค์–ด๊ฐ€ ์žˆ๋Š”๊ฒƒ!

์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” ์ฒ˜์Œ for ๋ฌธ ๋Œ๋ ธ์„๋•Œ, prefix = sta ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒƒ!!!!

๊ทธ๋ฆฌ๊ณ  for ๋ฌธ์„ ๊ณ„์† ๋Œ๋ฉด์„œ strs ๋ฐฐ์—ด๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ฒดํฌํ–ˆ๋‹ค๋ฉด? ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •์˜๋œ prefix ๋ฅผ return!

ย ย  model solution ย ย 

function getPrefix(strs) {
    if (strs.length === 0) return โ€˜โ€™;
    let prefix = strs[0];
    for (let i = 1; i < strs.length; i++) {
        while (strs[i].indexOf(prefix) !== 0) {
            prefix = prefix.substring(0, prefix.length - 1);
        }
    }
    return prefix;
}

์ผ๋‹จ.... '' return ํ•˜๋Š”๊ฑฐ if (strs.length === 0) return โ€˜โ€™; ์ด๋ ‡๊ฒŒ ์งง๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์—ˆ๊ตฌ๋‚˜ใ… ใ… .... ํ•˜๋‚˜ ๋ฐฐ์› ๋‹ค๋ฆฌ!!!

๋ชจ๋ธ ์†”๋ฃจ์…˜์€ for๋ฌธ์„ ์ด์ค‘์œผ๋กœ ์•ˆ๋Œ๋ฆฌ๊ณ  while ์„ ์‚ฌ์šฉํ–ˆ๋‹ค!
while์„ ์–ด๋Š ๋•Œ ์จ์•ผ ํ•˜๋Š”์ง€ ์ •ํ™•ํžˆ ๊ฐ์ด ์•ˆ์˜จ๋‹ค....
์ฃผ๋ง๋™์•ˆ ์‹œ๊ฐ„๋‚ด์„œ for in for of while ์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์‹น ์ •๋ฆฌํ•ด์•ผ ๊ฒ ๋‹ค...

์•„๋ฌดํŠผ ๊ทธ๋ž˜์„œ strs[i].indexOf(prefix) !== 0 ์ด๋ฉด, ์ฆ‰ ๋‚ด๊ฐ€ ๊ฑธ์–ด์คฌ๋˜ strs[i][j] !== prefix[j] ์ด ์กฐ๊ฑด์ด๋ž‘ ๊ฐ™์€๋ฐ, indexOf ๋กœ ๋” ๊น”๋”ํ•˜๊ฒŒ ์กฐ๊ฑด์„ ๊ฑธ์–ด์คฌ๋„น...!

์ด ์กฐ๊ฑด์— ๊ฑธ๋ฆฌ๋ฉด, prefix ๋ฅผ prefix.substring(0, prefix.length - 1); ์œผ๋กœ ์žฌ์ •์˜ํ•ด์ค€๋‹ค!

๐Ÿคท๐Ÿปโ€โ™€๏ธ substring?
string ๊ฐ์ฒด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋กœ ๋ถ€ํ„ฐ ์ข…๋ฃŒ ์ธ๋ฑ์Šค ์ „ ๊นŒ์ง€ ๋ฌธ์ž์—ด์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ!

๐Ÿคท๐Ÿปโ€โ™€๏ธ slice ๋ž‘์€ ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ??
๋‘˜์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ •๋ฆฌํ•œ ๋ธ”๋กœ๊ทธ๊ฐ€ ์žˆ์–ด ๋งํฌ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค!
< ์ถœ์ฒ˜ : https://velog.io/@ktseo41/TIL-6%EC%9B%94-24%EC%9D%BC-slice-substring-%EB%B9%84%EA%B5%90 >

profile
ํ•˜๋ฃจ๋Š” ์น˜์—ดํ•˜๊ฒŒ ์ธ์ƒ์€ ์—ฌ์œ ๋กญ๊ฒŒ

0๊ฐœ์˜ ๋Œ“๊ธ€