코딩 테스트/LeetCode
13. Roman to Integer (로마에서 정수로)
포카리tea
2023. 2. 28. 18:29
로마 숫자는 I, V, X, L, C, D 및 M의 7가지 기호로 표시됩니다.
기호 값
I 1
V 5
× 10
L 50
C 100
D 500
M 1000
예를 들어, 2는 로마 숫자로 II로 표기되며, 1을 2개만 더하면 됩니다. 12는 XII로 표기되며, 간단히 X + II입니다. 숫자 27은 XXVII로 표기되며, 이는 XX + V + II입니다.
로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 순서로 씁니다. 그러나 4의 숫자는 IIII가 아닙니다. 대신 숫자 4는 IV로 씁니다. 1이 5보다 앞에 있기 때문에 빼면 4가 됩니다. 같은 원리가 IX로 쓰여진 숫자 9에도 적용됩니다. 빼기가 사용되는 경우는 6가지입니다.
V(5)와 X(10) 앞에 I를 배치하여 4와 9를 만들 수 있습니다.
X는 L(50)과 C(100) 앞에 배치하여 40과 90을 만들 수 있습니다.
C는 D(500)와 M(1000) 앞에 배치되어 400과 900을 만들 수 있습니다.
로마 숫자가 주어지면 정수로 변환하십시오.
예시 1:
입력: s = "III"
출력: 3
설명: III = 3.
예시 2:
입력: s = "LVIII"
출력: 58
설명: L = 50, V= 5, III = 3.
예시 3:
입력: s = "MCMXCIV"
산출: 1994년
설명: M = 1000, CM = 900, XC = 90 및 IV = 4.
조건:
- 1 <= s.length <= 15
- s문자 만 포함합니다 ('I', 'V', 'X', 'L', 'C', 'D', 'M').
- 범위에서 유효한 로마 숫자 임을 보장 합니다 .s[1, 3999]
정답:
public class Solution {
public int RomanToInt(string s) {
int result = 0;
var dictionary = new Dictionary<char, int>()
{
{'I', 1},
{'V', 5},
{'X', 10},
{'L', 50},
{'C', 100},
{'D', 500},
{'M', 1000}
};
for (int i = 0; i < s.Length; i++)
{
if (i + 1 < s.Length)
{
if (dictionary[s[i]] >= dictionary[s[i + 1]])
{
result += dictionary[s[i]];
}
else
{
result += dictionary[s[i + 1]] - dictionary[s[i]];
i += 1;
}
}
else
{
result += dictionary[s[i]];
}
}
return result;
}
}
해설:
i번째와 i + 1 번째 로마 숫자를 비교하여 i + 1 숫자가 더 크다면 빼기가 사용되는 경우기 때문에 빼준 값을 더하고 해당 번째를 넘겨주었습니다.