코딩로그
[백준/BOJ/C++] 16503번 괄호 없는 사칙연산 본문
[문제]
사칙연산에서 곱셈과 나눗셈은 덧셈과 뺄셈보다 먼저 계산한다. 덧셈과 뺄셈을 먼저 계산하고 싶을 때는 보통 가장 큰 연산 우선순위를 가지는 괄호를 사용하여 연산 순서를 지정한다. 예를 들어, 아래의 식은 연산 순서에 따라 두 가지 다른 결과가 나올 수 있다.
- (2 + 3) × 4 = 20
- 2 + (3 × 4) = 14
연산 우선순위가 같은 곱셈과 나눗셈 또는 덧셈과 뺄셈만 있는 식에서는 보통 왼쪽에서 오른쪽 순서로 연산을 한다. 하지만 이런 상황에도 연산 순서에 따라 아래와 같이 두 가지 다른 결과가 나올 수 있다.
- (6 ÷ 2) × 3 = 9
- 6 ÷ (2 × 3) = 1
만약 곱셈, 나눗셈, 덧셈, 뺄셈의 4가지 연산자의 연산 우선순위가 동등하다고 할 때, 괄호 없는 식에서 서로 다른 연산 순서의 계산 결과를 구하여라.
[입력]
첫 번째 줄에는 "K1 O1 K2 O2 K3" 형태로 식이 주어진다. 정수 Ki (1 ≤ Ki ≤ 1,000)는 피연산자를, 문자열 Oi는 곱셈(*), 나눗셈(/), 덧셈(+), 뺄셈(-) 중 한 가지 연산자를 의미한다.
나눗셈 연산은 정수 나눗셈으로 몫만 취하며, 피연산자 중 하나가 음수이면 양수로 바꿔 계산한 결괏값에 음수를 취한다. 또한, 계산 과정에서 0으로 나누어야 하는 식은 주어지지 않는다.
[출력]
주어진 식에서 서로 다른 연산 순서의 계산 결과가 작은 것을 첫 번째 줄에, 큰 것을 두 번째 줄에 출력한다.
[Source Code]
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int change(int a, string op, int b){
if(op == "+")
return a+b;
else if(op == "-")
return a-b;
else if(op == "*")
return a*b;
else if(op == "/"){
if(a > 0 && b > 0)
return a / b;
if(a < 0)
a *= -1;
if(b < 0)
b *= -1;
return -1 * (a / b);
}
}
int main() {
int first, second, third, max = 0, min = 0;
string op1, op2;
cin >> first >> op1 >> second >> op2 >> third;
int temp1 = change(change(first, op1, second), op2, third);
int temp2 = change(first, op1, change(second, op2, third));
if(temp1 < temp2){
max = temp2;
min = temp1;
}
else{
max = temp1;
min = temp2;
}
cout << min << "\n" << max;
}
[결과 화면]
'YJ > C++' 카테고리의 다른 글
[백준/BOJ/C++] 4597번 패리티 (0) | 2021.11.09 |
---|---|
[백준/BOJ/C++] 6763번 Speed fines are not fine! (0) | 2021.11.08 |
[백준/BOJ/C++] 11367번 Report Card Time (0) | 2021.11.08 |
[백준/BOJ/C++] 11549번 Identifying Tea (0) | 2021.11.08 |
[백준/BOJ/C++] 12790번 Mini Fantasy War (0) | 2021.11.08 |