주어진 숫자를 로마자로 변환하는 문제다.
1~3999의 숫자만 변환할 수 있으면 된다.
1의 자리, 10의 자리, 100의 자리, 1000의 자리에서 사용되는 문자열의 종류를 정의해주고,
0~9의 숫자 표현법을 패턴화하여 더해주도록 했다.
/**
* @param {number} num
* @return {string}
*/
var intToRoman = function(num) {
// num은 1~3999이다.
const arr = num.toString().split('').reverse();
let result = '';
for (let i = 0; i < arr.length; i++){
result = makeRoman(parseInt(arr[i]), i) + result;
}
return result;
};
const makeRoman = (num, index) => {
// 0 1 2 3 4 5 6 7 8 9
// - I II III IV V VI VII VIII IX
// - X XX XXX XL L LX LXX LXXX XC
// 패턴...
// IVX, XLC, CDM, M
if(index > 2) {
let thousands = '';
for(let i = 0; i < num; i++){
thousands += 'M'
}
return thousands;
}
const lowStr = ['I', 'X', 'C'][index];
const fiveStr = ['V', 'L', 'D'][index];
const highStr = ['X', 'C', 'M'][index];
const pattern = {
0: '',
1: lowStr,
2: `${lowStr}${lowStr}`,
3: `${lowStr}${lowStr}${lowStr}`,
4: `${lowStr}${fiveStr}`,
5: `${fiveStr}`,
6: `${fiveStr}${lowStr}`,
7: `${fiveStr}${lowStr}${lowStr}`,
8: `${fiveStr}${lowStr}${lowStr}${lowStr}`,
9: `${lowStr}${highStr}`
}
return pattern[num];
}
'Web development > Algorithm' 카테고리의 다른 글
[LeetCode] 2. Add Two Numbers (javascript) (0) | 2021.05.31 |
---|---|
[LeetCode] 200. Number of Islands (javascript) (0) | 2021.05.31 |
[LeetCode] 43. Multiply Strings (javascript) (0) | 2021.05.31 |
[LeetCode] 17. Letter Combinations of a Phone Number (javascript) (0) | 2021.05.31 |
[LeetCode] ZigZag Conversion (javascript) (0) | 2021.05.19 |
댓글