[ TIL 38 ] Code-Kata day-5

_dodo_heeยท2021๋…„ 4์›” 13์ผ
0

ALGORITHM

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

Code Kata ๋ฌธ์ œ ๐Ÿ“œ

๋กœ๋งˆ์ž์—์„œ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๊ธฐ
1~3999 ์‚ฌ์ด์˜ ๋กœ๋งˆ์ž s๋ฅผ ์ธ์ž๋กœ ์ฃผ๋ฉด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ์„ธ์š”.
๋กœ๋งˆ ์ˆซ์ž๋ฅผ ์ˆซ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•ด๋ณด์ž ๐Ÿง

๋กœ๋งˆ์ž๋ฅผ ์ˆซ์žํ•œ ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์„œ ์ถœ๋ ฅํ•˜๊ธฐ

Code Kata ์ฒซ๋ฒˆ์งธ ์‹œ๋„ ๐Ÿ’ก

function romanToNum(s) {
  const rome = {
      'I' : 1,
      'V' : 5,
      'X' : 10,
      'L' : 50,
      'C' : 100,
      'D' : 500,
      'M' : 1000
    }
    let result = 0;
    let injas = s.split(''); // [ 'I', 'I', 'I' ]
    const injasValue = Object.values(s); // [ 'I', 'I', 'I' ]

    for(index in injas){
      let injas_value = injas[index]
      result += rome[injas_value]
    }
}
console.log(romanToNum('III')); //3

์ฒซ๋ฒˆ์งธ ์‹œ๋„ review (๋”ฐ๋ผํ•˜์ง€๋งˆ์„ธ์š”)โœ๏ธ

์ฒซ๋ฒˆ์งธ ์‹œ๋„์—์„œ ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์„œ ์ผ๋‹จ ์ œ์ผ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”
III์˜ ๊ฐ’์ด๋ผ๋„ ๊ตฌํ•ด๋ณด์ž๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ฒซ๋ฒˆ์งธ ์‹œ๋„๋ฅผ ํ–ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋กœ๋งˆ์ž์˜ ๊ฐ’์„ ์›ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— result์˜ ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๊ณ 
๋ฐ›์•„์˜จ ๋งค๊ฐœ๋ณ€์ˆ˜(์ธ์ž๋ฅผ)์˜ ๊ธ€์ž ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ชผ๊ฐœ์ค€๋‹ค.
์ธ์ž๋ฐฐ์—ด๊ณผ ์ธ์ž๊ฐ’ ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋กœ๋งˆ์ž์˜ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค.
์ธ์ž์Šค ์•ˆ์— ์ธ๋ฑ์Šค๊ฐ’์„ ๋Œ๋ฉด์„œ injas_value๋ผ๋Š” ๋ณ€์ˆ˜๋Š” ์ธ์ž์Šค์˜ ์ธ๋ฑ์Šค ๋ฐฐ์—ด์ด๋ฉฐ,
result ๊ฐ’์— ๋”ํ•˜๋ฉฐ ํ• ๋‹นํ•ด์ค˜๋ผ rome์˜ ์ธ๋ฑ์Šค ๋ฐฐ์—ด์„.

๋‚ด ๋จธ๋ฆฌ์† ์›ƒ๊น€ ํฌ์ธํŠธ (๋‘๋‘ฅ)

Object.keys(rome);
Object.values(rome);

๊ฐ์ฒด์•ˆ์— ๊ฐ’์„ ๋นผ์˜ค๋Š”๊ฑฐ์— ์ง‘์ฐฉํ•œ ๋‚˜๋จธ์ง€...

injasValue

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ๊ฑธ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋ช…...์ธ์ž์Šค...

์ •๋ง ๋‹ต๋„ ์—†์—ˆ๋˜ ์ฒซ๋ฒˆ์งธ ์‹œ๋„


Code Kata ๋‘๋ฒˆ์งธ ์‹œ๋„ ๐Ÿ’ก

function romanToNum(s) {
  // ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  const rome = {
    'I' : 1,
    'V' : 5,
    'X' : 10,
    'L' : 50,
    'C' : 100,
    'D' : 500,
    'M' : 1000
  }
  
  let result = 0
  const romeArray = s.split('') //I,V
  const numArray = romeArray.map(obj => rome[obj]) //[1,5]
  //obj = I,V
  
  for (i=0; i<numArray.length; i++) {
    if (numArray[i] < numArray[i+1] ) {
      result -= numArray[i]
      console.log(result)
    } else {
      result += numArray[i]
      console.log(result)
    }
  }
  
  return result
}

๋‘๋ฒˆ์งธ ์‹œ๋„ review โœ๏ธ

๋„์ €ํžˆ ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ• ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๋™๊ธฐ์˜ ๋„์›€์„ ๋ฐ›์•˜๋‹ค.
์ฒซ๋ฒˆ์งธ ์‹œ๋„์™€ ๋˜‘๊ฐ™์ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š”๊ฑด ๊ฐ’์ด๋‹ˆ๊นŒ result๋ฅผ 0์œผ๋กœ ์„ธํŒ…
romeArray๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ s๋ฅผ ์ชผ๊ฐœ์ค€๊ฑธ ๋‹ด์•„์ค€๋‹ค.
numArray๋Š” romeArray์˜ ๋ฐ›์•„์˜ค๋Š” ์ธ์ž๊ฐ’ obj๋ฅผ ๋ฐ›์•„์˜ค๋ฉด
rome์•ˆ์—์žˆ๋Š” I,V์˜ ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋‹ด๋Š”๋‹ค.
i=0, i๋Š” numArray์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘๊ฒŒ ๋ฐ˜๋ณต์‹œํ‚ค๊ณ  ์กฐ๊ฑด์ด ๋งž๋‹ค๋ฉด i๊ฐ’์„ ์ฆ๊ฐ€์‹œ์ผœ๋ผ
์กฐ๊ฑด์•ˆ์—๋Š” numArray์˜ ์ธ๋ฑ์Šค๊ฐ’์ด numArray์˜ ์ธ๋ฑ์Šค๊ฐ’+1ํ•œ ๊ฒƒ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
result์˜ numArray์˜ ์ธ๋ฑ์Šค๊ฐ’์„ ๋นผ์„œ ํ• ๋‹นํ•ด์ฃผ๊ณ 
๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด result๊ฐ’์— numArray์˜ ์ธ๋ฑ์Šค๊ฐ’์„ ๋”ํ•ด์„œ ํ• ๋‹นํ•ด์ค€๋‹ค.
๋ฐ˜๋ณต๋ฌธ์ด ๋‹ค ๋Œ์•„๊ฐ€๊ณ  result์˜ ํ• ๋‹น๋œ ๊ฐ’์„ ๋ฆฌํ„ด์‹œํ‚จ๋‹ค.


์ƒˆ๋กœ์šด ์•Œ๊ฒŒ ๋œ ๋ฉ”์„œ๋“œ ๐Ÿ“Œ

๋‚ด๊ฐ€ ์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์•Œ๊ฒŒ๋œ ๋ฉ”์„œ๋“œ์˜ ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ฒ ๋‹ค. (์•„์ฃผ ๊ฐ„๋‹จํžˆ)

split

๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•œ ๊ตฌ๋ถ„์ž(์ธ์ž๊ฐ’)๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

map()

๋ฐ˜๋ณตํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

+= -=

๋ง์…ˆ ํ• ๋‹น, ๋บ„์…ˆ ํ• ๋‹น

profile
๋ฌด๋Ÿญ๋ฌด๋Ÿญ ์ž๋ผ๋‚˜๋Š” ๋„๋„ ๊ฐœ๋ฐœ์„ฑ์žฅ์ผ๊ธฐ

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