본문 바로가기
Algorithm/Leetcode

LeetCode - Roman to Integer

by du.it.ddu 2020. 6. 27.
반응형

문제 링크 : https://leetcode.com/problems/roman-to-integer/

난이도 : Easy


문제 풀이 :

Symbol에 대하여 정해진 값이 있다.

그리고 이 Symbol들을 조합하여 숫자를 표현한다.

이 때, 어떤 Symbol 두 개의 조합은 특정한 숫자를 나타낸다는 조건이 있다.

IV(4), IX(9), XL(40), XC(90), CD(400), CM(900) 에 해당한다.

어떤 Symbol에 해당하는 값을 매핑시켜야 하고 조합이 몇 개 되지 않으므로 HashMap 자료구조를 사용하여 이 조합들의 값을 매핑시킨다.

그리고 주어진 문자열을 순회하면서 조합에 해당하는 값을 더해준다.


소스 코드 :

class RomanToInteger {
    companion object {
        val ROMAN_MAP = hashMapOf(
                "I" to 1,
                "V" to 5,
                "X" to 10,
                "L" to 50,
                "C" to 100,
                "D" to 500,
                "M" to 1000,
                "IV" to 4,
                "IX" to 9,
                "XL" to 40,
                "XC" to 90,
                "CD" to 400,
                "CM" to 900
        )
    }

    fun romanToInt(s: String): Int {
        var answer = 0

        var index = 0
        while(index < s.length) {
            val cur: String = s[index].toString()
            val next: String = s.getOrNull(index+1).toString()

            if(ROMAN_MAP.containsKey("$cur$next")) {
                answer += ROMAN_MAP.getOrDefault("$cur$next", 0)
                index += 2
            } else {
                answer += ROMAN_MAP.getOrDefault(cur, 0)
                index += 1
            }
        }
        return answer
    }
}

후기 : 

처음 for문을 사용하다 인덱스 처리가 까다로워서 잠시 고민을 했었다.

문제를 어떻게 푸느냐에 따라 for과 while중 어느 것이 효율적인지 잘 판단할 수 있어야 겠다고 생각했다.

반응형

'Algorithm > Leetcode' 카테고리의 다른 글

LeetCode - Merge Two Sorted Lists  (0) 2020.07.30
LeetCode - Valid Parentheses  (0) 2020.06.27
LeetCode - Longest Common Prefix  (0) 2020.06.27
LeetCode - Reverse Integer  (0) 2020.06.27
LeetCode - Two Sum  (0) 2020.06.27