[Leetcode] 13. Roman to Integer

Algorithm|2021. 7. 20. 22:20
반응형

Identifying the Problem

로마 숫자 표기를 int 형 숫자로 리턴하는 문제이다.

자세한 것은 아래 블로그를 참고하였다.

 

로마숫자 표기법 1 2 3 4 5 6 7 8 9 10 공식 유래 로만숫자 roman Numerals 문자 기원

안녕하세요. 이번 포스팅에서는 로마숫자를 표기하는 방법에 대해서 알아보려합니다. 우리가 사용하는 숫자...

blog.naver.com

 

Organizing thoughts

핵심 아이디어는 로마자 숫자 표기는 4와 9를 표기할 때만 왼쪽에 I를 붙이는 것이다.

40, 90도 마찬가지 이다. 

따라서 4와 9인 case 와 아닌 경우로 나누어 조건을 분리하였다.

또한 문자별로 M > D > C > L > X > V > I 의 우선순위를 갖고, 

그렇기에 5단위는 10단위 앞에 올 수 없고, D앞에 C를 제외한 나머지는 들어갈 수 없다.

이러한 모든 조건을 따져 보면 조건이 그렇게 많지 않음을 알 수 있다.

따라서 이러한 조건을 짠 후, 문자열 길이만큼 반복문으로 검사하였다.

 

1. 변수 sum 0으로 생성 후 초기화

2. 문자열 길이 파악

3. 조건 작성

4. 조건에 따른 수 sum 에 누적 

 

Sourcecode

int romanToInt(char * s){
  int n = strlen(s);
  int answer = 0;
  char c=0,nxt = 0;
    
  for(int i=0;i<n;i++)
  {
    c = *(s+i);
    nxt = *(s+1+i);
    
    if(c=='M')
      answer += 1000;
    
    if(c=='D')
      answer += 500;
      
    if(c=='C')
    {
      if(nxt =='M' ||nxt =='D')
         answer -=100;
      else
         answer +=100;
     
    }
      
    if(c=='L')
         answer +=50;    
     
    if(c=='X')
    {
      if(nxt =='C' ||nxt =='L')
         answer -=10;
      else
         answer +=10;
    } 
      
    if(c=='V')
      answer += 5;
      
    if(c=='I')
    {
      if(nxt =='X' || nxt =='V')
         answer -=1;
      else
         answer +=1;
     
    }
     
  }
    
   
   
    
  return answer;
    
}

Mistake

어렵다고 생각할 수 있지만, 의외로 쉬운 경우가 많다.

New things learned

  • 패턴을 찾으려기보다, 가능한 모든 경우를 파악하는게 더 좋을 수 있다.

 

가끔은 노가다가 정답일지도..??
반응형

'Algorithm' 카테고리의 다른 글

[Leetcode] 21. Merge Two Sorted Lists  (0) 2021.07.24
[Leetcode] 14. Longest Common Prefix  (0) 2021.07.24
[Leetcode] 20. Vaild Parentheses  (0) 2021.07.20
[Leetcode] 9. Palindrome Number  (0) 2021.07.19
[Leetcode] 7. Reverse Integer  (0) 2021.07.18

댓글()