Leetcode
[Leetcode] 13. Roman to Integer - JS
Wix
2024. 9. 19. 10:00
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 난이도를 푸니 쉽게 풀려서 기분이 좋다 ㅎㅎ