본문 바로가기
Computer Science/Problem Solve

LeetCode(릿코드) - Roman to Integer

by snfjddl 2021. 12. 3.

출처: https://leetcode.com/problems/roman-to-integer/

로마 숫자가 Input으로 들어오면 이를 10진수로 변환하는 프로그램을 작성하는 문제입니다.

예시는 다음과 같습니다.

Point

1. Subtraction은 IV, XC, CD 등의 형태만을 가진다.(IIV, CCM 같은 형태는 없음)

2. 로마 숫자는 내림차순으로 작성되므로 Input 문자열의 가장 뒷부분부터 체크하면 수월하다.

 

import java.util.*;
class Solution {
    public int romanToInt(String s) {
        Map<Character, Integer> roman = new HashMap();
        roman.put('I', 1);
        roman.put('V', 5);
        roman.put('X', 10);
        roman.put('L', 50);
        roman.put('C', 100);
        roman.put('D', 500);
        roman.put('M', 1000);
        
        int answer = 0;
        
        // OutOfRange Exception 예방으로 위해 for문은 index 1까지 탐색
        // flag 값을 통해 index 0~1 로마 숫자가 Substraction인지 체크
        boolean flag = false;	
		for (int i = s.length()-1; i > 0; i--) {
            if(roman.get(s.charAt(i)) > roman.get(s.charAt(i-1))) {
                answer += roman.get(s.charAt(i)) - roman.get(s.charAt(i-1));
                if(i == 1) {flag = true;}
                i--;
            } else {
                answer += roman.get(s.charAt(i));
            }
		}
        
        if(!flag) answer += roman.get(s.charAt(0));
		
		return answer;
	}
}

 

반응형

댓글