📅 22.10.12
📖 파트너 : 정관훈
문제설명 :
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
문자열로 받은 변수를 배열로 반환하고 각각의 문자열 요소에 대응하는 value값을 반환하도록 객체를 만들어 숫자를 계산하는 방식으로 생각했다
function romanToNum(s) {
// 여기에 코드를 작성해주세요.
result = 0;
const newArr = s.split("");
romeNum = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
}
const mapped = newArr.map((el) => romeNum[el]);
for (let i = 0; i < mapped.length; i++) {
if (mapped[i] < mapped[i + 1]) {
result -= mapped[i]
} else {
result += mapped[i]
}
}
return result;
}
이 코드를 짤 때 유의해야 할 점은
mapped[i] < mapped[i+1]
조건으로 i의 마지막 값을 접근할수 없어서 안될것이라 생각했는데 이 조건을 충족 하지 않을 시에 else 조건으로 빠져서 mapped[i]
를 합산해주면 되는 문제였다