코딩테스트

13. Roman to Integer

nayoon 2024. 2. 8. 23:08

https://leetcode.com/problems/roman-to-integer/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

/**
    1. 문제 해석하기
    I, V, X, L, C, D, M
    
    4 -> IIII x -> IV

    IV, IX
    XL, XC
    CD, CM
    2. 문제 풀이 방향
    단일 for문
    현재 index와 다음 index를 두고 다음 index의 값이 현재 index의 값보다 큰지 판단
    클 경우 다음 index의 값에서 현재 index의 값을 뺀 값을 더한 후 다다음 index로 넘어간다.
 */
class Solution {
    public int romanToInt(String s) {
        int len = s.length();
        int result = 0;

        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);

        for(int i = 0; i < len; i++) {
            if (i + 1 < len && map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
                result += (map.get(s.charAt(i + 1)) - map.get(s.charAt(i)));
                i += 1;
                continue;
            }
            result += map.get(s.charAt(i));
        }
        return result;
    }
}

 

위의 풀이보다 1ms 단축된 풀이이다.

비슷한 풀이이지만 뒤부터 문자열 요소를 비교했다는 점과 이전 데이터를 저장하고 있다가 비교한다는 점이 다른 점이다.

 

class Solution {
    public int romanToInt(String s) {
        int len = s.length();
        int result = 0;

        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);

        int prev = 0, number = 0;

        for(int i = len - 1; i >= 0; i--) {
            number = map.get(s.charAt(i));
            if (number < prev) {
                result -= number;
            } else {
                result += number;
            }
            prev = number;
        }
        return result;
    }
}

'코딩테스트' 카테고리의 다른 글

14. Longest Common Prefix  (0) 2024.02.14
844. Backspace String Compare  (0) 2024.02.12
136. Single Number  (1) 2024.02.07
876. Middle of the Linked List  (0) 2024.02.05
217. Contains Duplicate  (0) 2024.02.05