본문 바로가기
  •  오묘와 함께 살아가는 집사의 연구노트
코딩공부

LeetCode easy 13번 Roman to Integer 문제 C언어 풀이

by 오묘집사 2021. 11. 20.
728x90
반응형

안녕하세요 오묘집사입니다.

 

easy문제들 중 번호 순서대로 풀어보고 있는 중입니다.

 

이번 문제는 Roma 숫자 I V X 와 같은 방식으로 입력 받은 숫자를

10진법 숫자로 변환하는 문제였습니다.

 

그냥 무식하게 풀게 되었습니다.

 

아마 손코딩으로 했다면 100% 틀렸겠더라구요..

문자열인데 길이를 구할때 sizeof(int) 로 나눈다던가 하는 멍청한 짓을 했었습니다.

문자열이라 간단하게 strlen으로 반복문 길이를 설정했습니다.

로마자의 경우, 4, 9를 표현할 수 있도록 IV, IX 와 같이 앞에 붙일 수 있습니다.

저는 아예 if 문으로 이 경우들을 하나하나 적었었는데요.

이미 푸신분들의 코드를 보니, 간단하게 뒤에 숫자보다 작으면 빼주면 되는 문제였군요.

 

로마자의 경우 결국 모든 숫자를 더해주고, 4, 9, 40, 90 등을 표현하기 위한 경우들만 빼주면 됩니다.

 

해답

더보기

int romanToInt(char * s){
    int listsize = strlen(s);
    int res = 0;
    int i = 0 ;
    for (i; i < listsize;i++){
        if(s[i] == 'I')
            if(i+1<listsize&&((s[i+1]=='V')||(s[i+1]=='X')))
                res -= 1;
            else
                res += 1;
        else if(s[i] == 'V')
            res += 5;
        else if(s[i] == 'X')
            if(i+1<listsize&&((s[i+1]=='L')||(s[i+1]=='C')))
                res -= 10;
            else
                res += 10;
        else if(s[i] == 'L')
            res += 50;
        else if(s[i] == 'C')
            if(i+1 < listsize && ((s[i+1]=='D')||(s[i+1]=='M')))
                res -= 100;
            else
                res += 100;                
        else if (s[i] =='D')
            res += 500;
        else
            res += 1000;
    }

    return res;
}

 

이런 단순 계산의 문제일 수록, 틀리지 않도록 꼼꼼히 체크하는게 필수일 것 같습니다.

저는 익숙지 않다보니, 처음에 if문 안에 s[i+1] == D 라고 써서

'' 로 문자열 표시를 안해서 코드 러닝이 안되더군요..

이런부분도 꼼꼼히 체크하는게 필수인 것 같습니다!

반응형

댓글