반응형
풀이
크게 태그와 태그가 아닌 부분을 나누어서 생각하면 금방 풀린다.
01 태그 부분
if (c == '<')
{
isTag = true;
// workStack에 내용이 있었으면 answer에 뒤집어서 넣음
while (workStack.Count > 0)
answer.Append(workStack.Pop());
answer.Append('<');
}
// 태그 내부를 빠져나옴을 표시
else if (c == '>')
{
isTag = false;
answer.Append('>');
}
// isTag가 true인 경우 순서대로 넣음
else if (isTag)
{
answer.Append(c);
}
02 태그 아닌 부분
공백을 만나기전까지 workStack에 넣은 다음 공백을 만난 경우 뒤집어서 answer에 추가
else if (c == ' ')
{
while (workStack.Count > 0)
answer.Append(workStack.Pop());
answer.Append(' ');
}
else
{
workStack.Push(c.ToString());
}
03 마지막 출력
반복문을 끝내고 마지막으로 workStack이 비어있지 않은 경우 뒤집어서 answer에 추가
if (workStack.Count > 0)
{
while (workStack.Count > 0)
answer.Append(workStack.Pop());
}
Console.WriteLine(answer.ToString());
코드 전문
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace baek2
{
class Program
{
static void Main(string[] args)
{
Stack<string> workStack = new Stack<string>();
bool isTag = false;
StringBuilder answer = new StringBuilder();
string input = Console.ReadLine();
foreach (char c in input)
{
if (c == '<')
{
isTag = true;
while (workStack.Count > 0)
answer.Append(workStack.Pop());
answer.Append('<');
}
else if (c == '>')
{
isTag = false;
answer.Append('>');
}
else if (isTag)
{
answer.Append(c);
}
else if (c == ' ')
{
while (workStack.Count > 0)
answer.Append(workStack.Pop());
answer.Append(' ');
}
else
{
workStack.Push(c.ToString());
}
}
if (workStack.Count > 0)
{
while (workStack.Count > 0)
answer.Append(workStack.Pop());
}
Console.WriteLine(answer.ToString());
}
}
}
반응형
'코딩테스트 준비 > 백준 C#' 카테고리의 다른 글
백준 C# - 17298 +) 풀이 (0) | 2023.10.17 |
---|---|
백준 C# - 10799 +) 풀이 (0) | 2023.10.15 |
백준 C# - 1753 +) 풀이 단계 설명 (0) | 2023.10.09 |
백준 C# - 10866 (0) | 2023.10.04 |
백준 C# - 1158 +) 문제 설명 및 풀이 (0) | 2023.10.04 |
댓글