Intuition

  • 문자열 s에 주어진 Symbol에 Value를 부여해준다.
  • for문을 통해 문자열 s에서 한 문자씩 받아서 비교한다.

Approach

  • 단위값(1, 10, 100)일때 before_num에 저장후 다음의 값이 5, 10의 배수일때 before_num을 뺀만큼 sum에다가 더해준다.
    ex) before_num = 10, current_num = 50 or 100 -> sum += 40 or 90

  • before_num 역시 sum에 더해져있기 때문에 추후에 더해지는 값은 30 or 80이 된다.
    배수가 아닐시 문자에 맞는 Value값을 sum에 더해준다.

Code

class Solution {
public:
    int romanToInt(string s) {
        int sum = 0;
        int before_num = 0;
        for(auto c : s)
        {
            if(c == 'I') 
            {
                sum += 1;
                before_num = 1;
            }
            else if(c == 'V') 
            {
                if(before_num == 1)
                {
                    sum += 3;
                    before_num = 0;
                }
                else
                {
                    sum += 5;
                }
            }
            else if(c == 'X') 
            {
                if(before_num == 1)
                {
                    sum += 8;
                    before_num = 0;
                }
                else 
                {
                    sum += 10;
                    before_num = 10;
                }
            }
            else if(c == 'L') 
            {
                if(before_num == 10)
                {
                    sum += 30;
                    before_num = 0;
                }
                else 
                {
                    sum += 50;
                }
            }
            else if(c == 'C') 
            {
                if(before_num == 10)
                {
                    sum += 80;
                    before_num = 0;
                }
                else 
                {
                    sum += 100;
                    before_num = 100;
                }
            }
            else if(c == 'D') 
            {
                if(before_num == 100)
                {
                    sum += 300;
                    before_num = 0;
                }
                else 
                {
                    sum += 500;
                }
            }
            else if(c == 'M') 
            {
                if(before_num == 100)
                {
                    sum += 800;
                    before_num = 0;
                }
                else 
                {
                    sum += 1000;
                }
            } 
        }

        return sum;
    }
};

Result

profile
누누의 잡다저장소

0개의 댓글