코딩테스트

[LeetCode] 13. Roman to Integer

728x90

leetcode.com/problems/roman-to-integer/

 

Roman to Integer - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

오늘은 예지님이 내준 문제..! 조금 쉬운걸로 해보자고 하셨는데 확실히 트리보다는 낫다..

인덱스 문제를 해결하려다가 30분을 넘겼지만, 어쨋든 정상작동한 것에 뿌듯하다 😂

 

로마기호를 int로 계산하는 문제였는데, 연결된 로마기호가 있을 경우 4와 9가 들어갈떄는 다음과 같이 동작해야한다.

  • IV=V-I ➡ 4, IX=X-I ➡ 9
  • XL=L-X ➡ 40, XC=C-X ➡ 90
  • CD=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