SMALL

https://www.acmicpc.net/problem/17413

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net


  • 문제


  • 문제풀이

스택과 불을 사용한다. 문장 전체를 입력을 받은 뒤에 글자단위로 쪼개어 '<'를 만난다면 태그를 true로 바꿔주고 '>'가 나올때까지 출력을 해주고 공백을 제외하고 나머지 글자들은 스택에 넣은 뒤 '<'를 만나거나 공백을 만나게 된다면 스택에서 pop하여 순서가 반대로 출력되도록 한다.


  • 코드 1
using System.Collections.Immutable;
using System.Text;
using System.Collections.Generic;
using System;
using System.Collections;
using System.Formats.Asn1;

namespace YONGYONG2
{
    internal class Program
    {
        public static Stack<char> stack = new Stack<char>();
        
        static void Main(string[] args)
        {
            
            StringBuilder sb = new StringBuilder();
            char charAt;
            bool tag = false;
            string word = Console.ReadLine();
            for(int i = 0; i < word.Length; i++)
            {
                charAt = word[i];
                if (charAt == '<')
                {
                    tag= true;
                    while(stack.Any())
                    {
                        sb.Append(stack.Pop());
                    }
                    sb.Append(charAt);
                }
                else if (charAt == '>')
                {
                    tag = false;
                    sb.Append(charAt);
                }
                else if (tag == true)
                {
                    sb.Append(charAt);
                }
                else if (tag == true)
                {
                    sb.Append(charAt);
                }
                else if (tag == false)
                {
                    if(charAt==' ')
                    {
                        while (stack.Any())
                        {
                            sb.Append(stack.Pop());
                        }
                        sb.Append(charAt);
                    }
                    else
                    {
                        stack.Push(charAt);
                    }
                }
            }
            while(stack.Count> 0)
            {
                sb.Append(stack.Pop());
            }
            
            
           
            
            Console.WriteLine(sb.ToString());
            
        }
    }
}

  • 후기

문장 전체를 받고 글자 단위로 쪼개는 방법을 처음 알게 되었다. string으로 문장을 받고 문장의 길이만큼 반복문을 돌려 i번째 글자를 확인하는 방법을 알게 되었다.

LIST

+ Recent posts