class Solution {
public:
int romanToInt(string s) {
int answer = 0;
int signOne = 1;
int signTen = 1;
int signHun = 1;
for(int i = s.size(); i > -1; i--){
switch(s[i])
{
case 'I':
answer += signOne * 1;
break;
case 'V':
answer += 5;
signOne = -1;
break;
case 'X':
answer += signTen * 10;
signOne = -1;
break;
case 'L':
answer += 50;
signTen = -1;
break;
case 'C':
answer += signHun * 100;
signTen = -1;
break;
case 'D':
answer += 500;
signHun = -1;
break;
case 'M':
answer += 1000;
signHun = -1;
break;
}
}
return answer;
}
};
처음에는 0부터 시작을 해서 prev 값과 current의 값을 비교하면서 풀었는데 숫자도 복잡하고 계산도 초기값에 따라서 오류가 나서 고민하던중에
I, X, V를 빼면 나머지 문자들은 값이 정해저있고,
I, X, V는 더 큰 값이 나오면 부호가 반대로 정해진다는 것을 깨닫고
코드로 구현했다.
다른 사람들의 코드를 살펴보는데 진짜 깔끔하게 잘 만든 코드들을 보았다. iterator를 돌면서 전의 값보다 큰지 작은지 비교해서 - + 를 결정하는 코드였는데, for 문을 돌면서 prev와 current를 비교할 때 항상 마지막 element가 문제가 되는데 초기 answer 를 초기화 하는 부분에서 마지막 element를 변환한 값을 넣더라 진짜 깔끔하고 쉽다라는 느낌을 들었다. 망치로 머리를 두드린 느낌이었다.