안녕하세요 오묘집사입니다.
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 라고 써서
'' 로 문자열 표시를 안해서 코드 러닝이 안되더군요..
이런부분도 꼼꼼히 체크하는게 필수인 것 같습니다!
'코딩공부' 카테고리의 다른 글
LeetCode easy 9번 Palindrome Number 문제 C언어 풀이 (0) | 2021.12.05 |
---|---|
LeetCode easy 14번 Longest Common Prefix 문제 C언어 풀이 (0) | 2021.11.21 |
Leet Code Easy 1번 Two Sum 문제 C언어 풀이 (0) | 2021.11.20 |
댓글