Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- CS
- 언리얼 엔진5 #언리얼 클라이언트 프로그래밍
- 헤더 경로
- Console
- build.cs
- STL
- c++ 베이직
- C++
- Unreal
- 코드리뷰
- Module
- 오늘밤 세계에서 이 사랑이 사라진다 해도 #독후감 #오열
- Toon Shading
- 브론즈
- 언리얼엔진5 #언리얼 클라이언트 프로그래밍
- 툰쉐이딩
- A* Algorithm
- 순환 리스트
- UE_5
- topdownmove
- Gas
- CS50
- 메테리얼
- Harvard
- 백준
- 폭설 #미친 날씨
- leetcode
- 네트워크 기초
- 원카페#무인카페#카페추천#카페맛집
- 언리얼
Archives
- Today
- Total
WN_인생기록
LeetCode - 13 Roman to Integer 본문
로마숫자를 int로 표현하는 문제이다.
단순하게 매핑된 값을 꺼내는 문제인줄 알았으나,
조건이 있는게, IIII의 경우 IV 같이 5-4 라고 표현하는 것이다.
이는, 왼쪽에서 오른쪽으로 파싱할때, 현재의 숫자가 뒷자리 보다 작으면 -를
현재의 숫자가 뒷자리 보다 크면 + 를 한다는걸 의미한다.
(이게 제일 헷갈렸음)
그래서 이 조건을 따라보면,
class Solution
{
public:
int romanToInt(string s)
{
unordered_map<char, int> a;
a.emplace('I', 1);
a.emplace('V', 5);
a.emplace('X', 10);
a.emplace('L', 50);
a.emplace('C', 100);
a.emplace('D', 500);
a.emplace('M', 1000);
int result = 0;
// 문자열을 순회 처음부터 마지막까지
for (int i = 0; i < s.length(); i++)
{
// 현재 문자가 마지막일때 혹은 현재의 문자값이 다음 문자의 값보다 크거나 같을때
if (i == s.length() - 1 || a[s[i]] >= a[s[i + 1]])
{
result += a[s[i]];
}
else
{
result -= a[s[i]];
}
}
return result;
}
};
이런식으로 된다. 중요한건, s.length() -1 을 마지막으로 두어야 하는것인데, 안그러면 배열에서 넘어가는 값이 나와서 오류가 난다. 이를 방지하는 s.length()-1을 꼭 해줘야 한다.
그래서 이 조건대로 판별하면 원하는 값이 나온다.
성공했으나, 가장 효율적이었던 것은 map을 이용한 해시값 대응보다, 역순으로 for문 돌면서 switch로 값을 판별하는 것이 가장 빠른 방법이었다.
'LeetCode > Easy' 카테고리의 다른 글
LeetCode - 14.Longest Common Prefix (0) | 2024.03.27 |
---|---|
LeetCode - 9. Palindrome Number (0) | 2024.03.27 |