쉬운 문제지만 경험이 많이 없는 유형이라 한 번에 많은 걸 배운 문제이다. 먼저 필자가 풀었던 방식이다.
#include <iostream>
#include <string>
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
std::string notation;
std::cin >> notation;
int result = 0;
int num = 0;
int plusMinus = 1;
for (int index = 0; index < notation.length(); index++) {
if (notation[index] >= '0' && notation[index] <= '9') {
num = (num * 10) + notation[index] - '0';
}
else {
result += (plusMinus * num);
if (notation[index] == '-') {
plusMinus = -1;
}
num = 0;
}
}
result += plusMinus * num;
std::cout << result << std::endl;
}
-
연산자를 만나고 이후의 숫자부터 결과를 적용해주기 위해 연산 후 연산자의 값을 바꿔 주었다.result
에 더하는 코드를 추가해었다.그리고 이를 개선한 코드는 아래와 같다.
#include <iostream>
#include <string>
int main() {
int result;
int num;
char oper;
int plusMinus = 1;
for (scanf("%d", &result); scanf("%c", &oper), oper != 10;) {
scanf("%d", &num);
if (oper == '-') {
plusMinus = -1;
}
result += plusMinus * num;
}
printf("%d\n", result);
}
scanf()
는 함수이고, 반환값을 가지므로 for 구문의 각 영역에 들어갈 수 있다.result
에 입력하여 초기화해준다.oper
에 대한 입력을 for 구문 내부에 두면 마지막 문자 \n
을 입력했을 때의 조건문을 따로 추가해주어야 하므로 조건 검사에서 연산자에 대한 입력을 받는다. 입력은 틀리는 경우가 없으므로 연산자 입력에서 문제가 발생할 일은 없다.이러한 개선 코드를 사용하면 모든 문제점을 해결하면서 간결하게 코드를 작성할 수 있다.