CodeKata 02

Jisun Leeยท2021๋…„ 7์›” 20์ผ
0

Code Kata

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

๐Ÿ“ Today Question

reverse ํ•จ์ˆ˜๋Š” ์ •์ˆ˜ 'x' ๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ •์ˆ˜ 'x'๋ฅผ ๋’ค์ง‘์–ด return์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ์„ธ์š”.

ex)ใ…คx = 1234 ๏ฝœreturn = 4321
ใ…ค ใ…ค x = -1234๏ฝœreturn = -4321
ใ…ค ใ…ค x = 1230๏ฝœreturn = 321


๐Ÿ”Ž ์ฃผ์–ด์ง„ ์กฐ๊ฑด์€ ๋ฌด์—‡์ผ๊นŒ?

โœ” Check Point 1
: ํŒŒ๋ผ๋ฏธํ„ฐ x = ์ •์ˆ˜์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •์ˆ˜ x๋ฅผ ๋’ค์ง‘์–ด ๋‚˜์—ดํ•œ ๊ฐ’์€ return์ด ๋œ๋‹ค.
โœ” Check Point 2
: x๋Š” ์–‘์˜ ์ •์ˆ˜, 0, ์Œ์˜ ์ •์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ”Ž ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผํ• ๊นŒ?

๐Ÿƒ Step 1 : x๋ฅผ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์ž!(1)


// x = -9876์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ

const reverse = x => {
  let num = x.toString();
  //toString์€ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  //num = "-9876"
}

๐Ÿƒ Step 2 : x๋ฅผ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์ž!(2)


// x = -9876์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ

const reverse = x => {
  let num = x.toString();
  //toString = ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  //num = "-9876"
  let newNum = num.split('');
  //split = ()์•ˆ์— ์ง€์ •๋œ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ ์คŒ, ('')์‚ฌ์ด ๊ณต๋ฐฑ ์—†์ด ๊ตฌ๋ถ„์ž ''๋ฅผ ์ค„ ๊ฒฝ์šฐ ๊ธ€์ž๋ณ„๋กœ ์ž˜๋ฆผ
  //newNum = "-","9","8","7","6"
  let newArray = [] ;
  // newNum ๋ฌธ์ž์—ด์„ ๋‹ด์„ ๋นˆ array ์ƒ์„ฑํ•ด๋†“๊ธฐ
}

๐Ÿƒ Step 3 : ๋‚ฑ๊ฐœ๋กœ ์ชผ๊ฐœ์ ธ ์žˆ๋Š” x ๋ฌธ์ž์—ด์„ ๋นˆ array์— ๊ฑฐ๊พธ๋กœ ๋‹ด์ž!


// x = -9876์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ

const reverse = x => {
  let num = x.toString();
  //toString = ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  //num = "-9876"
  let newNum = num.split('');
  //split = ()์•ˆ์— ์ง€์ •๋œ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ ์คŒ, ('')์‚ฌ์ด ๊ณต๋ฐฑ ์—†์ด ๊ตฌ๋ถ„์ž ''๋ฅผ ์ค„ ๊ฒฝ์šฐ ๊ธ€์ž๋ณ„๋กœ ์ž˜๋ฆผ
  //newNum = "-","9","8","7","6"
  let newArray = [] ;
  // newNum ๋ฌธ์ž์—ด์„ ๋‹ด์„ ๋นˆ array ์ƒ์„ฑํ•ด๋†“๊ธฐ
  for (let i = newNum.length - 1; i >=0; i--){
  //newArray์•ˆ์— newNum์˜ ๋ ์ธ๋ฑ์Šค(newNum.length - 1)๋ถ€ํ„ฐ ๊ฐ€์žฅ ์•ž์˜ ์ธ๋ฑ์Šค(0)๊นŒ์ง€ ์—ญ์ˆœ์œผ๋กœ ๋‹ด์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— i์˜ ๋ฒ”์œ„๋Š” 0์—์„œ๋ถ€ํ„ฐ newNum.length - 1๊นŒ์ง€๋กœ ์ง€์ •ํ•œ๋‹ค.
//์ธ๋ฑ์Šค๋ฒˆํ˜ธ๋Š” 0 ๋˜๋Š” ์–‘์ˆ˜์ธ ์ •์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ i >= 0 ์ด true์ผ ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•˜๋Š” for๋ฌธ์ด๋‹ค.
    newArray.push(newNum[i]);
  //newArray = ["6","7","8","9","-"]
  }
}

๐Ÿƒ Step 4 : ์–‘์ˆ˜, ์Œ์ˆ˜, 0์„ ๊ณ ๋ คํ•˜์—ฌ x๋ฅผ ๋’ค์ง‘์€ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ž!


// x = -9876์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๋•Œ

const reverse = x => {
  let num = x.toString();
  //toString = ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  //num = "-9876"
  let newNum = num.split('');
  //split = ()์•ˆ์— ์ง€์ •๋œ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ ์คŒ, ('')์‚ฌ์ด ๊ณต๋ฐฑ ์—†์ด ๊ตฌ๋ถ„์ž ''๋ฅผ ์ค„ ๊ฒฝ์šฐ ๊ธ€์ž๋ณ„๋กœ ์ž˜๋ฆผ
  //newNum = "-","9","8","7","6"
  let newArray = [] ;
  // newNum ๋ฌธ์ž์—ด์„ ๋‹ด์„ ๋นˆ array ์ƒ์„ฑํ•ด๋†“๊ธฐ
  for (let i = newNum.length - 1; i >=0; i--){
  //newArray์•ˆ์— newNum์˜ ๋ ์ธ๋ฑ์Šค(newNum.length - 1)๋ถ€ํ„ฐ ๊ฐ€์žฅ ์•ž์˜ ์ธ๋ฑ์Šค(0)๊นŒ์ง€ ์—ญ์ˆœ์œผ๋กœ ๋‹ด์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— i์˜ ๋ฒ”์œ„๋Š” 0์—์„œ๋ถ€ํ„ฐ newNum.length - 1๊นŒ์ง€๋กœ ์ง€์ •ํ•œ๋‹ค.
//์ธ๋ฑ์Šค๋ฒˆํ˜ธ๋Š” 0,์–‘์ˆ˜์ •์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ i >= 0 ์ด true์ผ ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•˜๋Š” for๋ฌธ์ด๋‹ค.
    newArray.push(newNum[i]);
  //newArray = ["6","7","8","9","-"]
  }
  
  let newString = newArray.join('');
  //newString = ["6789-"]
  
  if (newString.slice(-1) === "-"{
  //newString.slice(-1) === "-" ๊ฐ€์žฅ ๋ ๋ฌธ์ž๊ฐ€ "-"๋ผ๋ฉด
      newString = '-' + newString.slice(0, -1);
  //newString.slice(0, -1)์€ newString์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด๋งŒ ์ œ์™ธํ•˜๊ณ  ์ „๋ถ€ ์ถœ๋ ฅ
  //newString = ["-6789"]
  }
  let reverseResult = parseInt(newString);
  //parseInt = ๋ฌธ์ž๋ฅผ ์ˆซ์žํƒ€์ž…(intํ˜•)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  // reverseResult = -6789

  return reverseResult;
}

๐Ÿ† Run Test!


๐Ÿ”Ž ์•Œ๊ฒŒ๋œ ๊ฒƒ์„ ์ •๋ฆฌํ•ด๋ณด์ž!

โœ” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” math.sign() ๋‚ด์žฅํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค. math.sign()์„ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ž๊ฐ€ ์–‘์ˆ˜, ์Œ์ˆ˜, 0 ์ค‘ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
โœ” ๋‚ด ์ฝ”๋“œ์—์„œ๋Š” ํ•˜๋‚˜ ํ•˜๋‚˜ ์ƒˆ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋‹จ๊ณ„๋ณ„๋กœ .toString, .split, .join ๋“ฑ์„ ์‚ฌ์šฉํ•ด์คฌ์ง€๋งŒ ์‚ฌ์‹ค ์ด๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค.
๋ณ€์ˆ˜์ด๋ฆ„.toString().split('').join('') ์œผ๋กœ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
โœ” ๋‚ด ์ฝ”๋“œ์—์„œ๋Š” ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด๋†“์€ x๋ฅผ for๋ฌธ์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋’ค์ง‘์–ด์คฌ์ง€๋งŒ reverse() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•Œ์•„์„œ ๋’ค์ง‘์–ด์ค€๋‹ค!

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