Leetcode - 13. Roman to Integer

m0d0ri205·2024년 10월 1일

LeetCode

목록 보기
2/4
post-thumbnail

들어가며

Leetcode 문제 풀이이다. C++를 사용하여 해당 사이트의 문제들을 풀어나갈 예정이다.

13. Roman to Integer

description :

해당 문제 설명이다. 로마 숫자는 7가지 기호로 표시됩니다. (I, V, X, L, C, D 및 M)


해당 표를 통해 숫자 표기가 가능하다. 예를 들어 VI라는 숫자가 있을 경우, 표에 따라 V = 5, I = 1인 6을 의미한다. 반대로 IV와 같이 큰 수 왼쪽에 작은 수가 오면 "V - I = 5 - 1"과 같이 계산되어 4의 값을 의미하게 된다.

unordered_map<char, int > key = {
            {'I', 1},
            {'V', 5},
            {'X', 10},
            {'L', 50},
            {'C', 100},
            {'D', 500},
            {'M', 1000},
        }; // map

C++에 존재하는 map이라는 기능을 활용해서 위와 같이 7개의 기호를 숫자 값으로 매핑해주었다.

for(int i = 0; i < s.length(); i++) {
            if (key[s[i]] < key[s[i+1]]) { // number of rigth case
                total -= key[s[i]];
            }
            else { // number of left cats
                total += key[s[i]];
            }
        }

문자의 길이만큼 반복을 해주고, 첫 if문에서 현재 문자가 다음 문자보다 값이 작을 경우, 이는 빼야하는 상황에 발생한 것이기에 해당 값을 빼주었다. 그 밖에 사건들은 else를 이용해서 더해주었다.

class Solution {
public:
    int romanToInt(string s) {
        unordered_map<char, int > key = {
            {'I', 1},
            {'V', 5},
            {'X', 10},
            {'L', 50},
            {'C', 100},
            {'D', 500},
            {'M', 1000},
        }; // map

        int total = 0;

        for(int i = 0; i < s.length(); i++) {
            if (key[s[i]] < key[s[i+1]]) { // number of rigth case
                total -= key[s[i]];
            }
            else { // number of left cats
                total += key[s[i]];
            }
        }
    return total;
    }
};

전체 코드이다. 이를 위와 같은 방법으로 문제를 해결할 수 있었다.

후기

처음 딕셔너리를 어떻게 구현해야 할지 고민했지만, map 사용법을 익힌 이후 쉽게 풀 수 있었던 문제였다.

profile
말하는 감자중.....

0개의 댓글