Leetcode 문제 풀이이다. C++를 사용하여 해당 사이트의 문제들을 풀어나갈 예정이다.
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 사용법을 익힌 이후 쉽게 풀 수 있었던 문제였다.