728x90
leetcode.com/problems/roman-to-integer/
오늘은 예지님이 내준 문제..! 조금 쉬운걸로 해보자고 하셨는데 확실히 트리보다는 낫다..
인덱스 문제를 해결하려다가 30분을 넘겼지만, 어쨋든 정상작동한 것에 뿌듯하다 😂
로마기호를 int로 계산하는 문제였는데, 연결된 로마기호가 있을 경우 4와 9가 들어갈떄는 다음과 같이 동작해야한다.
IV=V-I
➡ 4,IX=X-I
➡ 9XL=L-X
➡ 40,XC=C-X
➡ 90CD=D-C
➡ 400,CM=M-C
➡ 900
substring을 활용해서 하나씩 출력 후 값을 더하는 방식으로 진행했다.
만약 두 수가 위의 4
, 9
에 속하는 경우에는 더하기(+)가 아닌 빼기(-)로 동작하도록 코드를 구현했다. ( 위의 빼기 패턴을 활용한 다른 풀이방법이 있을 것 같다. )
두 개를 합쳐야되는 경우에도 substring 을 사용하려다보니 index 오류가 나서 이걸 해결해야했다.
조건을 안걸고 roman2 = s.substring(i, i+2);
코드를 쓰게되면, 마지막에서 index 값이 없기 때문에 오류가 난다. 따라서,마지막에는 i+2
를 쓰지 않도록 IF문을 걸어 해결해 주었다.
index 값을 벗어났을 때 오류 : java.lang.StringIndexOutOfBoundsException:
public static int romanToInt(String s) {
int val = 0;
for(int i=0;i<s.length();i++) {
String roman = s.substring(i, i+1);
String roman2 = "";
if(i<(s.length()-2)) {
roman2 = s.substring(i, i+2);
}else {
roman2 = s.substring(i, s.length());
}
switch(roman) {
case "I":
if(roman2.equals("IV") || roman2.equals("IX")) {
val-=1;
}else {
val+=1;
}
break;
case "V": val+=5; break;
case "X":
if(roman2.equals("XL") || roman2.equals("XC")) {
val-=10;
}else {
val+=10;
}
break;
case "L": val+=50; break;
case "C":
if(roman2.equals("CD") || roman2.equals("CM")) {
val-=100;
}else {
val+=100;
}
break;
case "D": val+=500; break;
case "M": val+=1000; break;
}
}
return val;
}
더 간단한 코드 구현이 분명히 있겠지만..어쨋든 오랜만에 문제풀이에 성공해서 정말 정말 기분이 좋다👏🥰👏👏
728x90
'코딩테스트' 카테고리의 다른 글
[LeetCode] 1. Two Sum (4) | 2021.03.16 |
---|---|
[LeetCode] 347. Top K Frequent Elements (0) | 2021.03.15 |
[LeetCode] 112. Path Sum (0) | 2021.03.11 |
[LeetCode] Binary Tree Inorder Traversal (0) | 2021.03.11 |
[LeetCode] 509. Fibonacci Number (JAVA) (0) | 2021.03.08 |