Leetcode

[Leetcode] 13. Roman to Integer - JS

Wix 2024. 9. 19. 10:00

https://leetcode.com/problems/roman-to-integer/description/?envType=study-plan-v2&envId=top-interview-150

 

1. 문제 분석

문제분석
--------------------
- I = 1
- V = 5
- X = 10
- L = 50
- C = 100
- D = 500
- M = 1000

- 2는 II, 12는 XII, 27은 XXVII
- Roman 숫자는 왼쪽에서 오른쪽으로 가장 큰거부터 작은거 순서대로 작성한다.
- 하지만 4는 IIII가 아니라, IV이다.
  왜냐하면 5 이전에 존재하는 값은 4를 만들기 위해 빼준다.
  같은 방법으로 9는 VIIII가 아니라 IX이다.
- 추가로 6가지 상황이 있다.
  - I는 V, X 앞에 위치하여 4, 9를 나타낼 수 있다.
  - X는 L, C 앞에 위치하여 40, 90을 나타낼 수 있다.
  - C는 D, M 앞에 위치하여 400, 900을 나타낼 수 있다.

- Roman 숫자를 정수로 변환하여 반환하라.

제한조건
--------------------
- 1 <= s.length <= 15
- s는 'I', 'V', 'X', 'L', 'C', 'D', 'M'으로 구성된다.
- s는 유효한 Roman 숫자 범위인 [1, 3999]내에 있다.

 

2. 접근 방법

접근방법
--------------------
현재 Roman 숫자와 다음 Roman 숫자를 비교하여
다음 Roman가 더 크면 현재 Roman 숫자를 빼준다.

 

 

3. 코드

var romanToInt = function(s) {
     const ROMAN = {
        I: 1,
        V: 5,
        X: 10,
        L: 50,
        C: 100,
        D: 500,
        M: 1000
    }
    let total = 0;
    for (let i = 0; i < s.length; i++) {
        const next = s[i + 1]
        const curr = s[i];
        if (ROMAN[next] > ROMAN[curr]) {
            total -= ROMAN[curr]
        } else {
            total += ROMAN[curr];
        }
    }
    return total;
};

 

 

4. 복잡도 분석

- 시간복잡도: O(n)

- 공간복잡도: O(1)

 

오래간만에 Easy 난이도를 푸니 쉽게 풀려서 기분이 좋다 ㅎㅎ