본문 바로가기
코딩테스트 준비/백준 C#

백준 C# - 17413 +) 풀이

by 코딩하는 돼징 2023. 10. 15.
반응형

풀이

크게 태그와 태그가 아닌 부분을 나누어서 생각하면 금방 풀린다.

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

댓글