본문 바로가기

Programming/알고리즘 공부

[LeetCode] Roman to Integer | 난이도: Easy

반응형

문제

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

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

로마자를 정수로 변환.


예시

Example 1
Input: s = "III"
Output: 3

Example 2
Input: s = "IV"
Output: 4

Example 3
Input: s = "IX"
Output: 9

Example 4
Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

Example 5
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

해당 문자에 해당하는 숫자를 더하거나 빼면 된다.

기본적으로 왼쪽에서 오른쪽 방향으로 큰 숫자(왼쪽) -> 작은 숫자(오른쪽) 순서대로 구성된다.

하지만, 숫자 4 또는 9를 다루는 경우 해당 규칙이 적용되지 않는다.

4 또는 9의 경우 오른쪽 -> 왼쪽 방향으로 숫자를 빼는 방식이다.

 

예시)

4 = IV, 9 = IX / 40 = XL, 90 = XC / 400 = CD, 900 = CM

 

구현 시 I, X, C 뒤에 나오는 문자가 해당 문자보다 크기가 크다면 더하지 말고 빼도록 구현해야 한다.


제약조건

  • 1 <= s.length <= 15 (문자의 길이는 1 이상 15 이하로 제한)
  • s contains only the characters ('I', 'V', 'X', 'L', 'C', 'D', 'M'). ('I', 'V', 'X', 'L', 'C', 'D', 'M' 문자만 사용하도록 제한)
  • It is guaranteed that s is a valid roman numeral in the range [1, 3999]. (결과값은 4000미만 정수가 되도록)

답안

class Solution {
    public int romanToInt(String s) {
        
   Step.01)
        Map<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);
   
   Step.02)
        char[] charArr = s.toCharArray();
        
        int result = 0, i = 0, j = 1;
   
   Step.03)
        for(; j < charArr.length; i++, j++){
            if(map.get(charArr[i]) >= map.get(charArr[j])){           
                result += map.get(charArr[i]);
            }else{
               result -= map.get(charArr[i]);
            }
        }
    Step.04)
        result += map.get(charArr[i]);
        return result;
    }
}

Step.01)

- key, value 한 쌍으로 이루어진 자료형 map을 사용해 로마자에 해당하는 정수를 입력한다.

 

Step.02)

- toCharArray를 통해 문자열을 char형 배열 형태로 만든다. 배열의 길이는 문자열의 길이와 같다.

- 문자열 공백도 인덱스에 포함되기 때문에 주의해야 한다.

- 만약 변수 s의 값이 "IV"라면, charArr["I", "V"] 이런 형태의 배열이 만들어지는 것이다.

 

Step.03)

- Step.02에서 만든 charArr 배열의 길이만큼 반복 -> map에서 value값 가져와서 비교한다.

 

Step.04)

- 변수 result에 결과값을 더한다.

반응형