https://www.acmicpc.net/problem/2504
stack을 이용해서 풀어야한다
밑에 그림 참고해서 괄호를 하나씩 확인해서 stack에 넣고 확인하고 쌓고 빼고 숫자 넣고 더하고 빼고 반복해야한다
그러고 남아있는게 없으면 올바른 괄호이고 계산을 하면된다
계산은 괄호 다 풀고 마지막에 남은거 더해서 출력하면 됨
값은 다 잘나오는데 런타임 에러 뜬다ㅠㅠㅠㅠ뭐가 문제인지...?
)), ]] 입력받으면 스택이 비어있는데 peek로 확인을 해서 에러가 남
그래서 ), ] 받으면 0 출력하고 리턴시키는거 코드 추가해서 정답!
using System;
using System.Collections.Generic;
namespace _2504
{
class Program
{
static void Main(string[] args)
{
var input = Console.ReadLine();
var stack = new Stack<string>();
foreach (var strput in input)
{
string put = strput.ToString();
switch (put)
{
case "(":
case "[":
stack.Push(put);
break;
case ")":
if (stack.Count != 0 && stack.Peek() == "(") { stack.Pop(); }
else
{
Console.WriteLine(0);
return;
}
break;
case "]":
if (stack.Count != 0 && stack.Peek() == "[") { stack.Pop(); }
else
{
Console.WriteLine(0);
return;
}
break;
}
}
if (stack.Count == 0)
{
foreach (var strput in input)
{
string put = strput.ToString();
int sum = 0;
switch (put)
{
case "(":
case "[":
stack.Push(put);
break;
case ")":
while (stack.Peek() != "(")
{
sum += int.Parse(stack.Pop());
}
stack.Pop();
if (sum == 0)
{
stack.Push("2");
}
else
{
stack.Push((sum * 2).ToString());
}
break;
case "]":
while (stack.Peek() != "[")
{
sum += int.Parse(stack.Pop());
}
stack.Pop();
if (sum == 0)
{
stack.Push("3");
}
else
{
stack.Push((sum * 3).ToString());
}
break;
}
}
int result = 0;
while (stack.Count != 0)
{
result += int.Parse(stack.Pop());
}
Console.WriteLine(result);
}
else
{
Console.WriteLine(0);
}
}
}
}
'c# > 알고리즘' 카테고리의 다른 글
정리 (0) | 2020.07.08 |
---|---|
1074번 z (0) | 2020.06.29 |
1302번 베스트셀러 (0) | 2020.06.08 |
1343번 폴리오미노 (0) | 2020.06.01 |
1181 단어 정렬 (0) | 2020.05.25 |