Roman to Integer

James_·2022년 7월 26일
0

문제 설명

로마어를 숫자로 변환하는 문제이다.

Input: s = "III"
Output: 3
Explanation: III = 3

여기서 까다로운 조건이 있다.

V 또는 X는 전에 나오는 I는 4나 9가 되고
L 또는 C 전에 나오는 X는 마찬가지로 40 또는 90이 된다는 점이였다.

해결

for loop을 돌면서 i와 i+1를 비교하여 i가 큰 숫자이면 더하고 i+1이 더 크다면 빼주면 된다.
그 전에 해시맵을 만들어서 진행하면 된다.

        fun romanToInt(s: String): Int {
        var cnt = 0
        // 해시키로 만들어준다.
        val roman = hashMapOf<Char,Int>()
        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)

        print(s.indices)

		// 인덱스로 for loop을 돌아준다
        for(i in s.indices){
        // index 에러가 나지 않기 위해 i+1 < s 문자열 길이만 비교해주고 위에 말한 것과 같이 i와 i+1를 비교하여 i가 큰 숫자이면 더하고 i+1이 더 크다면 빼준다.
            if(i+1 < s.length && roman.get(s.get(i))?: 0 < roman.get(s.get(i+1)) ?: 0){
                cnt -= roman[s.get(i)] ?: 0
            }else{
                cnt += roman[s.get(i)] ?: 0
            }
        }

        return cnt
    }

영어라서 느리게 읽히는 것도 있고 기존의 단순한 방식으로만 생각해서 고민을 많이 하게 된 문제였다.

profile
Android 개발자

0개의 댓글