2024. 8. 19. 13:31ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/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으로 나누어야 하는 식은 주어지지 않는다.
출력
주어진 식에서 서로 다른 연산 순서의 계산 결과가 작은 것을 첫 번째 줄에, 큰 것을 두 번째 줄에 출력한다.
통과한 답안
namespace _16503
{
internal class Program
{
static void Main(string[] args)
{
string[] inputs = Console.ReadLine().Split(' ');
int n1 = int.Parse(inputs[0]);
int n2 = int.Parse(inputs[2]);
int n3 = int.Parse(inputs[4]);
string c1 = inputs[1];
string c2 = inputs[3];
int answer1 = Calcul(n1, n2, c1);
answer1 = Calcul(answer1, n3, c2);
int answer2 = Calcul(n2, n3, c2);
answer2 = Calcul(n1, answer2, c1);
Console.WriteLine(Math.Min(answer1, answer2));
Console.WriteLine(Math.Max(answer1, answer2));
}
static int Calcul(int n1, int n2, string c1)
{
if (c1 == "+")
{
return n1 + n2;
}
else if (c1 == "-")
{
return n1 - n2;
}
else if (c1 == "*")
{
return n1 * n2;
}
else
{
return n1 / n2;
}
}
}
}
주어진 3개의 숫자와 2개의 연산자에 대해서
왼쪽의 연산을 먼저한 경우와 오른쪽의 연산을 먼저한 경우로 나눠서
작은값과 큰값을 출력하는 문제이다.
문제를 해결하기 위해서 각 연산자에 따라서 연산을 수행하는 메서드를 만든 후에
answer1은 왼쪽을 먼저 계산한 결과를
asnwer2는 오른쪽을 먼저 계산한 결과를 저장하도록 한 후에
작은값과 큰값을 출력하도록 구현하였다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 9693: 시파르 (C#) (0) | 2024.08.22 |
---|---|
[BAEKJOON] 백준 31789: 모험의 시작 (C#) (0) | 2024.08.20 |
[BAEKJOON] 백준 16504: 종이접기 (C#) (0) | 2024.08.19 |
[BAEKJOON] 백준 16673: 고려대학교에는 공식 와인이 있다 (C#) (0) | 2024.08.19 |
[BAEKJOON] 백준 15923: 욱제는 건축왕이야!! (C#) (0) | 2024.08.19 |