TIL _ Code Kata _ 로마숫자를 아라비아 숫자로 바꾸기
❓문제
- 1 ~ 3,999 사이의 로마숫자를 인자로 받았을 때, 이를 아라비아 숫자로 바꾸는 로직을 구현
- 로마자는 각각 아래와 같이 대응하며,
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1,000
일반적인 로마숫자 변환 방식을 따릅니다. (ex. XXVII = 27, CDLIX = 459)
function romanToNum (s) { };
1. 해결 방안
- 사고 과정
🔓 (문제 파악) 주어진 Symbol과 Value를 함수 인자와 비교할 수 있어야 한다.
🔑 (해결 방안) Symbol(key
)과 Value(value
)로 이루어진 프로퍼티를 담은 객체를 선언한다.
function romanToNum(s) {
const roman = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000,
};
}
🔓 (문제 파악) 로마숫자를 아라비아 숫자로 바꿀 때의 규칙성 또는 공식을 파악한다.
🔑 (해결 방안)
- 예를 들어,
- 숫자 4를 표현할 때에는 V 왼쪽에 I가 붙는다.
- 숫자 6을 표현할 때에는 V 오른쪽에 I가 붙는다.
- 숫자 40를 표현할 때에는 L 왼쪽에 X가 붙는다.
- 숫자 60을 표현할 때에는 L 오른쪽에 X가 붙는다.
- 숫자 400를 표현할 때에는 D 왼쪽에 C가 붙는다.
- 숫자 600을 표현할 때에는 D 오른쪽에 C가 붙는다.
...
→ 이어지는 로마숫자의 단위가 왼쪽 자리의 단위보다 클 경우, 왼쪽 자리의 로마숫자는 뺄셈이 된다.
→ 이어지는 로마숫자의 단위가 왼쪽 자리의 단위보다 작을 경우, 왼쪽 자리의 로마숫자는 덧셈이 된다.
🔓 (문제 파악) 파악한 규칙성을 바탕으로 주어진 로마숫자를 변환한다.
🔑 (해결 방안)
function romanToNum(s) {
const roman = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000,
};
let result = 0;
for (i=0; i < s.length; i++) {
roman[s[i]] < roman [s[i+1]]
? result -= roman[s[i]]
: result += roman[s[i]];
};
// 연속되는 두 로마숫자의 단위를 비교하며, 조건에 따라 덧셈과 뺄셈을 argument의 길이만큼 반복한다.
return result;
}
2. 결과
function romanToNum(s) {
const roman = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000,
};
let result = 0;
for (i=0; i < s.length; i++) {
roman[s[i]] < roman [s[i+1]]
? result -= roman[s[i]]
: result += roman[s[i]];
};
return result;
}
console.log(romanToNum('XXVII')); // 27
console.log(romanToNum('CDLIX')); // 459
"작성 내용 중 오류나 오타가 있다면, 댓글로 알려주시면 감사하겠습니다. 주니어 개발자에게 남겨주시는 작은 피드백이 큰 도움이 될 것 같습니다. 고맙습니다 :)"
Author And Source
이 문제에 관하여(TIL _ Code Kata _ 로마숫자를 아라비아 숫자로 바꾸기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@okcleff/TIL-Code-Kata-로마숫자를-아라비아-숫자로-바꾸기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)