문제
초기 정수 A에서 시작하여 연산자 B 쌍이 반복적으로 주어지며, =이 입력되면 연산을 종료하고 최종 결과를 출력하는 누적 계산기 문제다. 지원 연산자는 +, -, *, /이다.
입력
- 첫 줄에 초기 정수 A가 주어진다.
- 이후
연산자 B쌍이 줄마다 주어지며, 연산자가=이면 종료한다.
출력
- 최종 계산 결과를 출력한다.
예제
| 입력 | 출력 |
|---|---|
5 + 3 * 2 = | 16 |
풀이
초기값을 누산기로 사용하며, 연산자와 피연산자를 반복 입력받아 누적 계산한다.
- 초기값
a를 입력받는다. - 연산자
op를 읽고,=이면 루프 종료 op가=이 아니면 정수b를 추가 입력op에 따라a = a op b연산 수행- 루프 종료 후
a출력
핵심 아이디어: 결과를 a 변수에 계속 덮어쓰는 누산기(accumulator) 패턴으로 구현한다.
코드
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int a;
cin >> a;
while (true)
{
char op;
cin >> op;
if (op == '=')
{
break;
}
int b;
cin >> b;
if (op == '+')
{
a = a + b;
}
else if (op == '-')
{
a = a - b;
}
else if (op == '*')
{
a = a * b;
}
else if (op == '/')
{
a = a / b;
}
}
cout << a;
return 0;
}복잡도
- 시간: O(N) — 연산 횟수 N에 비례
- 공간: O(1) — 상수 개의 변수만 사용