๋ก๋ง์์์ ์ซ์๋ก ๋ฐ๊พธ๊ธฐ
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 ์ ๋๋ค. ๋ค์ ์ซ์์์ ์์ ์ซ์๋ฅผ ๋นผ์ฃผ๋ฉด ๋ฉ๋๋ค. 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์ ๊ฐ์ด ์ ์์ ์ธ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
์ ๋ง ๊ฐ๋ง์ ๊น๋ํ ํผ ๊ฒ ๊ฐ๋ค.
์ธ์๋ก ๋ฐ์ ์ ์ํ์
์ ๊น๋ํ ์ ์ํ์
์ผ๋ก ๋ณํํ ์ ์์ด ์ข์๋ค.