코딩테스트
1541번 잃어버린 괄호
Cadi
2025. 4. 5. 14:06
코딩테스트 : 1541번 잃어버린 괄호
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 128 MB | 102841 | 57166 | 44427 | 54.915% |
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
public class BackJoon
{
public static void Main()
{
string input = Console.ReadLine();
string tempNumber = "";
int answer = 0;
bool minus = false;
for (int i = 0; i < input.Length; i++)
{
if ( char.IsDigit(input[i]))
{
tempNumber += input[i];
}
else
{
if (minus)
{
answer -= int.Parse(tempNumber);
}
else
{
answer += int.Parse(tempNumber);
}
tempNumber = "";
if (input[i] == '-') minus = true;
}
}
answer += minus ? -int.Parse(tempNumber) : int.Parse(tempNumber);
Console.WriteLine(answer);
}
}
한 번 빼기가 등장한 이후에는 뒤에 있는 모든 것들을 묶어서 뺄 수 있다.
따라서, bool 값으로 처리를 해 줬다.
사실 이 문제는 보자마자 풀었지만 다른 사람의 풀이를 잠깐 보기 위해 적었다.
다른 사람의 흥미로운 풀이
문제 그대로 사용해서 푸신 분이 있으셨다.
우선 -로 한 번 Split을 한 뒤에 그 문자 배열을 한 번 더 +로 Split 해서 더해준다.
그 후 첫 번째 인덱스에서 나머지 인덱스를 빼 주면 된다.
만일 -가 한 번도 등장하지 않는다면, 첫 번째 인덱스가 그대로 답이 되게 된다.
생각보다 신기한 방법이었고, Split 하는 방식이 흥미로워서 기억에 남는다.
Array.ConvertAll(splitedStr[i].Split('+'), int.Parse).Sum()