[LeetCode] Roman to Integer
코테연습2022. 2. 13. 19:42
https://leetcode.com/problems/roman-to-integer/
로마문자로 표기된 숫자를 Integer로 변환하는 문제.
우선 로마표기법 숫자는 큰 숫자를 의미하는 문자부터ㅡ
작은 숫자를 의미하는 문자까지 왼쪽에서 오른쪽으로 차례대로 배치된다.
단, IV, IX 등 작은 숫자가 앞에 배치되면 다르게 계산된다.
I = 1
II = 2
III = 3
IV = 4 (IIII로 표기하지 않는다.)
V = 5
VI = 6 ...
우선 로마문자가 들어간 배열 ['I', 'V',..] 과 그 순서대로 숫자가 들어간 배열 [1, 5,..] 을 만들어 준다.
입력값의 맨 앞부터 끝까지 배치된 문자와 roman의 문자를 비교해서,
두 문자가 일치하면 같은 위치의 Integer 값을 꺼낸다.
그리고 위 규칙을 통해.. 예를 들어서 XIV라는 입력이 들어 왔을때,
문자 | X | I | V |
배열index | 0 | 1 | 2 |
수(=a_i) | 10 | 1 | 5 |
a0 = 10, a1 = 1, a2 = 5와 같이 a1<a2이면 a1은 전체 숫자에서 빼 주는 방식으로 하려 했다.
하지만.. a1과 a2를 비교하려니 구현이 쉽지 않아서(...)
그냥 각 문자와 일치하는 숫자가 차례대로 들어가는 배열을 만들고,
그 배열 안에서 순서대로 비교해서, 앞 숫자보다 뒷 숫자가 더 크면 빼도록 했다.
var romanToInt = function(s) {
var roman = ['I', 'V', 'X', 'L', 'C', 'D', 'M'];
var nums = [1,5,10,50,100,500,1000];
var number = [];
var answer = 0;
for(i=0;i<s.length;i++){
for(j=0;j<7;j++){
if(s[i]==roman[j]){
number.push(nums[j]);
}
}
}
for(k=0;k<number.length;k++){
if(number[k]<number[k+1]){
answer = answer - number[k];
}
else{
answer = answer + number[k];
}
}
return answer;
}
아무런 힌트도 보지 않고 처음부터 끝까지 스스로 풀어서 뿌듯한 문제!
여기서 romans와 nums 배열을 하나의 객체로 표현하면 더 간단하게도 풀 수 있다...
'코테연습' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 (0) | 2022.02.19 |
---|---|
[프로그래머스] 약수의 개수와 덧셈 (0) | 2022.02.09 |
[프로그래머스] 음양 더하기 (0) | 2022.02.09 |
댓글()