CodeKata | Week 2 - Day 1

์ฝ”๋”ฉํ•˜๋Š”๋ถ•์–ดยท2021๋…„ 6์›” 28์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜

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

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

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

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

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


๊ทธ๋Ÿฐ๋ฐ 4๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ๋Š” IIII๊ฐ€ ์•„๋‹ˆ๋ผ IV ์ž…๋‹ˆ๋‹ค. ๋’ค์˜ ์ˆซ์ž์—์„œ ์•ž์˜ ์ˆซ์ž๋ฅผ ๋นผ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 9๋Š” IX์ž…๋‹ˆ๋‹ค.


I๋Š” V์™€ X์•ž์— ์™€์„œ 4, 9
X๋Š” L, C์•ž์— ์™€์„œ 40, 90
C๋Š” D, M์•ž์— ์™€์„œ 400, 900



๐Ÿ’ก My Solution

function romanToNum(s) {
  let romanNum = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000   
  }
  
  let result = 0;
  
  for(let i = 0; i < s.length; i++) {  // s์˜ ๊ธธ์ด๋งŒํผ ์ˆœํšŒํ•˜๋ฉด์„œ
    if(romanNum[s[i]] < romanNum[s[i+1]]) {  // ์•ž์˜ ์ˆซ์ž๊ฐ€ ๋’ค์˜ ์ˆซ์ž๋ณด๋‹ค ์ž‘์œผ๋ฉด (ex. I(1) < V(4))
      result += romanNum[s[i+1]] - romanNum[s[i]];  // ๋’ค์˜ ์ˆซ์ž์—์„œ ์•ž์˜ ์ˆซ์ž๋ฅผ ๋บธ ๊ฐ’์„ result์— ๋”ํ•ด์ค€๋‹ค. 
      i++;  // ๊ทธ๋ฆฌ๊ณ  ํ•œ ์นธ ๊ฑด๋„ˆ๋›ด๋‹ค. (ex. XIVX์˜ 'IV'. IV๋Š” I์™€ V์ฒ˜๋Ÿผ ๋”ฐ๋กœ๊ฐ€ ์•„๋‹ˆ๊ณ  IV๊ฐ€ ํ•˜๋‚˜์˜ ๋กœ๋งˆ์ž๋กœ 4์ด๊ธฐ ๋•Œ๋ฌธ!)
    } else {  // ๊ทธ ์™ธ์—๋Š”
      result += romanNum[s[i]];  // ๊ทธ๋ƒฅ ๋”ํ•œ๋‹ค! (ex. XXIV์˜ X์™€ X. ๊ทธ๋ƒฅ X(10) + X(10) ๋”ํ•ด์ฃผ๋ฉด ๋จ!)
    }
  }
  return result;
}

romanToNum('XIVX');

4์™€ 9์ผ ๊ฒฝ์šฐ๋Š” if๋ฌธ์—, ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ๋Š” else๋กœ ๋Œ๋ ธ๋‹ค
์–ด๋ ต๋‹ค ใ… ใ… 

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