12. Integer to Roman 풀이 - js

fgStudy·2022년 5월 29일
0

코딩테스트

목록 보기
31/69
post-thumbnail

해당 포스팅은 릿코드 12번 Integer to Roman 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 구현 문제이다.


문제

정수를 로마 숫자로 표현하면 되는 문제이다.
로마 숫자의 각 값은 아래와 같다.

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

로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 것에서 작은 것 순으로 표기한다. 하지만 아래 6가지의 경우 오른쪽에서 왼쪽으로 작은 것에서 큰 것으로 표기되며 빼기가 적용된다. (IV, IX, XL, XC, CD, CM)

- I can be placed before V (5) and X (10) to make 4 and 9. 
- X can be placed before L (50) and C (100) to make 40 and 90. 
- C can be placed before D (500) and M (1000) to make 400 and 900.

풀이

릿코드 13번. Roman to Integer와 달리 정수를 로마 숫자로 변경하는 문제이다.

문제에서 오른쪽에서 왼쪽으로 작은 것에서 큰 것으로 표기되며 빼기가 적용되는 6가지 경우가 있다고 명시되어 있다. 원래는 6가지 경우를 직접 적는 것이 아닌 loop를 돌려서 넣어주려고 했으나, 그러면 데이터 구조가 복잡해져서(2중 배열) 직접 모든 경우를 객체에 넣어주었다.

const ROMAN = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1
};

이 때 값이 큰 순으로 객체를 만들어주었으며, loop를 돌리면서 num / 로마 값만큼 문자열을 더해주었다.

let str = '';
for (let s of Object.keys(ROMAN)) {
  const r = Math.floor(num / ROMAN[s]);
  num -= r * ROMAN[s];
  str += s.repeat(r);
}

전체 코드

/**
 * @param {number} num
 * @return {string}
 */

const ROMAN = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1
};

var intToRoman = function(num) {
    let str = '';
    for (let s of Object.keys(ROMAN)) {
        const r = Math.floor(num / ROMAN[s]);
        num -= r * ROMAN[s];
        str += s.repeat(r);
    }
    return str;
};
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글