[LeetCode] Roman to Integer

아르당·2024년 11월 15일

LeetCode

목록 보기
4/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

로마 숫자들은 7개의 다른 기호 I, V, X, L, C, D와 M으로 나타있다.

기호
I1
V5
X10
L50
C100
D500
M1000

예를 들어, 2는 로마 숫자에서 II로 쓰고, 1 두 개를 더하면 된다. 12는 XII로 쓰고, X + II가 된다. 숫자 27은 XXVII이고, XX + V + II이다.

로마 숫자는 보통 큰 쪽에서 작은 쪽으로 왼쪽에서 오른쪽으로 쓴다. 그러나 숫자 4는 IIII가 아니다. 대신에 숫자 4는 IV로 작성한다. 왜냐하면 5에서 1을 빼는 것으로 4를 만든다. 같은 원리로 숫자 9도 IX로 나타낸다. 빼기가 사용되는 경우는 6가지가 있다.

  • I은 V(5)와 X(10) 앞에 위치하면 4와 9를 만들 수 있다.
  • X는 L(50)과 C(100) 앞에 위치하면 40과 90을 만들 수 있다.
  • C는 D(500)와 M(1000) 앞에 위치하면 400과 900을 만들 수 있다.

주어진 로마 숫자를 정수로 변환해라.

Example

#1
Input: s = "III"
Output: 3
Explanation: III = 3

#2
Input: s = "LVIII"
Output: 58
Explanation: L = 50, V = 5, III = 3

#3
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90, IV = 4

Constraints

  • 1 <= s.length <= 15
  • s는 오직 I, V, X, L, C, D, M의 문자만 포함한다.
  • s는 1에서 3999 범위의 유효한 로마 숫자만 존재한다.

Solved

Map을 사용하면 좀 더 빠른 처리 시간과 효율있게 문제를 풀 수 있지만, if문을 사용해서 노가다로 풀었다.
각 해당되는 문자가 나왔을때 알맞은 수를 더하고, 만약 해당 문자 앞에 빼기가 되는 수가 온다면 빼기를 한 수를 더해주면 문제를 해결할 수 있다.
따로 코드를 설명하지 않고 바로 All Code로 넘어가겠다.

All Code

class Solution {
  public int romanToInt(String s) {
    int result = 0;
    String[] sArr = s.split("");

    for(int i = 0; i < sArr.length; i++){
      if(i == 0){
        if(sArr[i].equals("I")) result += 1;
        else if(sArr[i].equals("V")) result += 5;
        else if(sArr[i].equals("X")) result += 10;
        else if(sArr[i].equals("L")) result += 50;
        else if(sArr[i].equals("C")) result += 100;
        else if(sArr[i].equals("D")) result += 500;
        else if(sArr[i].equals("M")) result += 1000;
      }else{
        if(sArr[i].equals("I")){
          result += 1;
        }else if(sArr[i].equals("V")){
          if(sArr[i - 1].equals("I")) result += 3;
          else result += 5;
        }else if(sArr[i].equals("X")){
          if(sArr[i - 1].equals("I")) result += 8;
          else result += 10;
        }else if(sArr[i].equals("L")){
          if(sArr[i - 1].equals("X")) result += 30;
          else result += 50;
        }else if(sArr[i].equals("C")){
          if(sArr[i - 1].equals("X")) result += 80;
          else result += 100;
        }else if(sArr[i].equals("D")){
          if(sArr[i - 1].equals("C")) result += 300;
          else result += 500;
        }else if(sArr[i].equals("M")){
          if(sArr[i - 1].equals("C")) result += 800;
          else result += 1000;
        }
      }
    }

    return result;
  }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글