Code Kata #5 romanToNum

kich555ยท2021๋…„ 9์›” 30์ผ
0

Code Kata

๋ชฉ๋ก ๋ณด๊ธฐ
5/7

๐Ÿ’ปRoman To Num

๋กœ๋งˆ์ž์—์„œ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๊ธฐ

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

SymbolValue
I1
V5
X10
L50
C100
D500
M1000

๋กœ๋งˆ์ž๋ฅผ ์ˆซ์ž๋กœ ์ฝ๋Š” ๋ฐฉ๋ฒ•์€ ๋กœ๋งˆ์ž๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. III = 3 XII = 12 XXVII = 27 ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก๊ทธ๋Ÿฐ๋ฐ 4๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ๋Š” IIII๊ฐ€ ์•„๋‹ˆ๋ผ IV ์ž…๋‹ˆ๋‹ค. ๋’ค์˜ ์ˆซ์ž์—์„œ ์•ž์˜ ์ˆซ์ž๋ฅผ ๋นผ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ex) 9๋Š” IX์ด๊ณ , XL์€ 40 XC์€ 90, CD๋Š” 400, CM์€ 900์ž…๋‹ˆ๋‹ค.

โ˜•์ฒซ๋ฒˆ์งธ ํ’€์ด

function romanToNum(s) {
  
  let answer = 0; // ๋‹ต์„ ๋‹ด์„ ์ •์ˆ˜ ํƒ€์ž… ๊ทธ๋ฆ‡
  
  const roman = {
    I : 1,
    V : 5,
    X : 10,
    L : 50,
    C : 100,
    D : 500,
    M : 1000,
  } // ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ

  for(let i =0; i<s.length; i++){ // ์ธ์ž๋กœ ๋ฐ›๋Š” ๋ฌธ์ž์—ด s๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ
    if(roman[s[i]]<roman[s[i+1]]){ // ์˜ˆ์™ธ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์กฐ๊ฑด๋ฌธ
    answer -= roman[s[i]]
    }else{
    answer += roman[s[i]]
    }
  
  }return answer
  }

๋กœ๋งˆ์ž์™€ ์ƒ์‘ํ•˜๋Š” ์ˆซ์ž๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ , ์ธ์ž๋กœ ๋ฐ›์€ s์˜ ๋กœ๋งˆ์ž๋ฅผ ์ƒ์‘ํ•˜๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜, ๋‹ค์‹œ ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

ex) s='II' => roman[I] + roman[I]  => ( 1 + 1 )

์œ„ ๋ฐฉ๋ฒ•์—๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ IV, IX, ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์ด๋‹ค.

์ด ๊ฒฝ์šฐ๋ฅผ ํ•ด๊ฒฐํ•  ์กฐ๊ฑด์‹

    if(roman[s[i]]<roman[s[i+1]])

๐Ÿ’ก IV, IX, XL, XC๋“ฑ์˜ ์กฐ๊ฑด์„ ๋ณด๋‹ค ํ•œ๊ฐ€์ง€ ํŒจํ„ด์„ ์ฐพ์•˜๋Š”๋ฐ, ๋ฐ”๋กœ ์–ธ์ œ๋‚˜ ์•ž์˜ ๋ฌธ์ž๊ฐ€ ๋’ค์˜ ๋ฌธ์ž๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์ผ๋•

  answer -= roman[s[i]]

์™€ ๊ฐ™์ด ์•ž์˜ ๋ฌธ์ž๋ฅผ ๋นผ๋ฉด,
XXIX => 10+10-1+10 => 29์™€ ๊ฐ™์ด ์ •์ƒ์ ์ธ ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

๐Ÿ’ป๋ฆฌํŒฉํ† ๋ง ?

์ •๋ง ๊ฐ„๋งŒ์— ๊น”๋”ํžˆ ํ‘ผ ๊ฒƒ ๊ฐ™๋‹ค.
์ธ์ž๋กœ ๋ฐ›์€ ์ •์ˆ˜ํƒ€์ž…์„ ๊น”๋”ํžˆ ์ •์ˆ˜ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด ์ข‹์•˜๋‹ค.

profile
const isInChallenge = true; const hasStrongWill = true; (() => { while (isInChallenge) { if(hasStrongWill) {return 'Success' } })();

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