C#/알고리즘
백준#1541 - 잃어버린 괄호
McRobbin
2020. 4. 11. 17:36
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.
www.acmicpc.net
그리디 알고리즘으로 분류된 잃어버린 괄호 문제 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _1541
{
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();
int start = 0;
foreach (string strNum in plusInput[0].Split('+'))
start += int.Parse(strNum);
//-가 한개도 안나온 경우.
Console.WriteLine(start);
//-가 한번이라도 나온 경우.
else
{
{
string[] plusSplitInput = plusInput[i].Split('+');
foreach (string strNum in plusSplitInput)
start -= int.Parse(strNum);
}
Console.WriteLine(start);
}
}
}
}
|
이 문제의 핵심은 -의 등장 유무 입니다. -가 몇개 있는지도 중요하지 않습니다.
ex) 19 + 14 - 15 + 4 - 15 + 13 + 2 + 2
이렇게 있을 경우 처음 19에서 14를 뺄 수 있는 방법은 전혀 없습니다. 하지만 계산중에
+4를 뺄 수 있는 방법은 있습니다.
바로 앞의 -15를 이용해 이와 괄호로 묶어 -(15 + 4)와 같은 방식으로 쓸 수 있습니다.
즉 -가 등장한 시점부터 뒤의 모든 수는 전부 뺄 수 있습니다. 중간에 -가 섞여 있다면
그 바로 앞에서 괄호를 닫고 다시 여는 것으로 다시 빼기를 시작할 수 있습니다.
우선 입력받은 식의 -를 기준으로 split했습니다. 0번째 식의 결과는 빼기를 시작할 처음 수가 됩니다.
다음 부터는 숫자를 전부 빼주면 되는데 저는 split('-') 되어 있는 식에 다시 모두 + 스플릿을 하여 가져왔습니다.
그 다음 처음 식의 결과값 부터 모두 빼주고 출력하면 되겠습니다.