[ 처음 풀이 ]
입력받은 로마 숫자를 하나하나 변환하여 숫자의 배열로 만들고,
( XIV -> 10, 1, 5 )
숫자의 배열을 index=0 부터 끝까지 조사하여, 앞의 숫자가 뒤의 숫자보다 작은 경우 ( num[i] < num[i+1] ) 에만 그 두 숫자의 차를 구해 다시 집어넣은 후, 마지막에 총 합계를 구했다.
문제에도 쓰여 있듯, IV, IX, XL, XC, CD, CM을 처리해주는 방법만 고민해 본다면 어렵지 않은 문제였던 것 같음.
class Solution {
public:
int romanToInt(string s) {
vector<int> num;
int sum = 0;
for (int i = 0; i < s.length(); i++) {
switch (s[i]) {
case 'I':
num.push_back(1);
break;
case 'V':
num.push_back(5);
break;
case 'X':
num.push_back(10);
break;
case 'L':
num.push_back(50);
break;
case 'C':
num.push_back(100);
break;
case 'D':
num.push_back(500);
break;
case 'M':
num.push_back(1000);
break;
default:
break;
}
}
for (int i = 0; i < num.size(); i++) {
if (i != num.size() - 1) {
bool isReverse = (num[i] < num[i + 1]);
if (isReverse) {
num.insert(num.begin() + i, num[i + 1] - num[i]);
num.erase(num.begin() + i + 1);
num.erase(num.begin() + i + 1);
}
}
}
for (int i = 0; i < num.size(); i++) {
sum += num[i];
}
return sum;
}
};