728x90
1. 문제
https://codeup.kr/problem.php?id=2020
[출처 : 코드업(https://codeup.kr/)]
이번 문제는 (숫자+문자)가 여러개 이어져있는 입력을 해석하는 문제입니다.
다만 현재 심볼이 이전 심볼보다 크면 더하고 작으면 빼주는 규칙이 있습니다.
2. 해답
#include <stdio.h>
#include <math.h>
char symbol[7] = { 'I', 'V', 'X' , 'L' , 'C' , 'D' , 'M' };
int value[7] = { 1, 5, 10, 50, 100, 500, 1000 };
int my_atoi(char c) {
for (int i = 0; i < 7; i++) {
if (symbol[i] == c) return value[i];
}
return 0;
}
int my_strlen(char* s) {
int c = 0;
int i = 0;
while (s[i++] != NULL) {
c++;
}
return c;
}
int main() {
char Arr[41];
int state, before_state = 0;
int num = 0;
scanf("%s", Arr);
for (int i = my_strlen(Arr) - 1; i > 0; i -= 2) {
state = my_atoi(Arr[i]);
if (state >= before_state) {
// 현재 심볼이 이전 심볼보다 뒤에 있으면
num += (((int)Arr[i - 1] - 48) * state);
}
else {
// 현재 심볼이 이전 심볼보다 앞에 있으면
num -= (((int)Arr[i - 1] - 48) * state);
}
before_state = state;
}
printf("%d\n", num);
return 0;
}
'프로그래밍 > CodeUp' 카테고리의 다른 글
CodeUp[Q_2024] : 숫자를 한글로 변환 (7) | 2020.03.18 |
---|---|
CodeUp[Q_2023] : 엑셀의 열 순서 (0) | 2020.03.17 |
CodeUp[Q_2019] : 이차 방정식의 해 (0) | 2020.03.15 |
CodeUp[Q_2018] : 개미 수열 (0) | 2020.03.14 |
CodeUp[Q_2017] : 진법 변환 (0) | 2020.02.19 |