Algorithm/문제풀이

[leetcode]13. Roman to Integer

Razelo 2026. 1. 4. 21:12

간만에 주말에 심심해서 문제를 좀 풀어봤다. 

딱히 어렵진 않아서 설명은 생략 

class Solution {
public:
    static int val(char c) { 
        switch (c) { 
            case 'I': return 1; 
            case 'V': return 5; 
            case 'X': return 10; 
            case 'L': return 50; 
            case 'C': return 100; 
            case 'D': return 500; 
            case 'M': return 1000; 
            default: return 0; 
        }
    }

    int romanToInt(string s) {
        int adder = 0; 
        int l = (int) s.size(); // size_t -> int  
        int i = 0; 

        while (i < l) { 
            char curr_char = s[i]; 
            int curr = val(curr_char); 
            int next = -1; 
            if (i + 1 < l) { 
                next = val(s[i + 1]); 
            }

            if (next == -1) { 
                adder += curr; 
                return adder; 
            }

            if (curr_char == 'I' || curr_char == 'X' || curr_char == 'C') { 
                if (next > curr) { 
                    adder += (next - curr); 
                    i += 2; 
                } else { 
                    adder += curr; 
                    i++;
                }
            } else { 
                adder += curr;
                i ++;  
            }
        }

        return adder; 
    }
};


/*

    int romanToInt(string s) {
        int num = 0; 
        int l = (int) s.size(); // size_t -> int  
        int i = 0; 

        while (i < l) { 
            char curr = [i];   
            char next = '-';
            if (i + 1 <= l - 1) { 
                next = s[i + 1]; 
            }

            if (next == '-') { 
                num += m.at(curr); 
                return num; // finish calc 
            }

            if (curr == 'I' || curr == 'X' || curr == 'C') { 
                int front = m.at(curr); 
                int back = m.at(next);   
                if (back > front ) { 
                    num += (back - front); 
                    i += 2; 
                } else { 
                    num += front; 
                    i += 1; 
                }
            } else { 
                num += m.at(curr);
                i ++;
            } 
        }

        return num; 
    }

*/