728x90
문제
https://www.acmicpc.net/problem/4949
이전에 진행했던 대칭괄호 문제와 유사하다. Stack의 Peek을 사용해도 되고 Queue를 사용해도 될 거 같다.
코드
using System;
using System.Text;
using System.Collections.Generic;
namespace baekjoon
{
class Algorithm
{
static void Main(string[] str)
{
while(true)
{
string s = Console.ReadLine();
if(s.Length == 1 && s[0] == '.') { break; }
bool isOkay = true;
Stack<char> stack = new Stack<char>();
foreach(var c in s)
{
if(c == '(' || c == '[') { stack.Push(c); }
if(c == ')')
{
if(stack.Count == 0 || stack.Peek() != '(')
{
isOkay = false;
break;
}
else
{
stack.Pop();
}
}
if(c == ']')
{
if(stack.Count == 0 || stack.Peek() != '[')
{
isOkay = false;
break;
}
else
{
stack.Pop();
}
}
}
if(stack.Count == 0 && isOkay == true)
{
Console.WriteLine("yes");
}
else
{
Console.WriteLine("no");
}
}
}
}
}
고민
내가 이거때문에 이해가 안되서 잠을 못잤다.
결국 다른 사람 코드를 대조하면서까지 집요하게 찾아냈는데.. 이유가
using System;
using System.Text;
using System.Collections.Generic;
namespace baekjoon
{
class Algorithm
{
static void Main(string[] str)
{
Stack<char> stack = new Stack<char>();
StringBuilder sb = new StringBuilder();
while(true)
{
string s = Console.ReadLine();
// 종료 조건
if(s.Length == 1 && s[0] == '.') { break; }
// 반복 조건
for(int i = 0; i < s.Length; i++)
{
if(s[i] == '(' || s[i] == '[')
{
stack.Push(s[i]);
}
if(s[i] == ')')
{
if(stack.Peek() != '(' || stack.Count == 0)
{
sb.AppendLine("no");
stack.Clear();
continue;
}
else
{
stack.Pop();
}
}
if(s[i] == ']')
{
if(stack.Pop() != ']' || stack.Count == 0)
{
sb.AppendLine("no");
continue;
}
else
{
stack.Pop();
}
}
if(stack.Count == 0)
{
sb.AppendLine("yes");
break;
}
}
}
Console.WriteLine(sb);
}
}
}
다른 분들은 보이시나요...
if문에서 stack.Count == 0을 먼저 해주지 않아서 그렇다.... Stack은 후입선출을 하는 자료구조이기 때문에 stack안에 데이터가 없으면 에러가 발생하는데, 이를 if문에서 미리 stack.Count == 0로 예외처리를 해주고 다음 || 이하의 연산(?)에 들어가야해서 그렇다.
내가 진짜.. 이거때문에 얼마나 힘들고 다른 사람 코드를 봐야한다는 사실에 기분도 안좋고 슬펐는데 결국 내 무지와 섬세하지 못한 부분에서 또 일이 났다.
앞으로는 이런 부분에서 문제가 발생하지 않도록 주의 해야겠다고 생각했다.
'동식이 취업시키기 작전 > 코딩테스트' 카테고리의 다른 글
[백준] 4673 셀프넘버(C#) (0) | 2024.01.25 |
---|---|
[백준] 2839 설탕배달(C#) (1) | 2024.01.24 |
[백준] 1764 듣보잡(C#) (0) | 2024.01.24 |
[백준] 11866 요세푸스(C#) (1) | 2024.01.23 |
[백준] 5430 AC(C#) (0) | 2024.01.23 |