白駿17413単語反転2


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


トラブルシューティング


単語は1題の適用バージョンを反転し,タグ内の単語とタグ外の単語を大別することがこの問題のポイントである.
タグ変数を宣言して、
  • タグ内の単語を区別します.
  • if"<"then tag=true,スタック中pop()
  • if">"then tag=false,直接出力
  • ifタグの単語であれば
  • を出力する.
  • elseラベル以外の単語は
  • です.
  • スタック()
  • にプッシュ
  • の空白に遭遇した場合、スタックが空きになるまでpop()
  • がスタック内に存在する.
    pop()

    ソースコード

    import java.io.*;
    import java.util.Stack;
    
    /**
     * 단어 뒤집기 문제 응용 - 스택
     * <> 태그 안에 있는 문자는 그대로 출력
     * <> 태그 밖에 있는 문자는 뒤집어서 출력
     */
     
    public class b17413 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            String input = br.readLine();
            boolean tag = false; // 태그 구분 변수
            Stack<Character> stack = new Stack<>();
            for (char ch : input.toCharArray()) {
                if (ch == '<') { // 시작하는 태그라면
                    tag = true;
                    while (!stack.empty()) {
                        bw.write(stack.pop()); // 태그 전까지의 단어 뒤집어서 출력
                    }
                    bw.write(ch); // < 출력
                } else if (ch == '>') { // 끝나는 태그라면
                    tag = false;
                    bw.write(ch); // > 출력
                } else if (tag) { // 태그 안에 있는 단어라면
                    bw.write(ch); // 그대로 출력
                } else { // 태그 안에 있는 단어가 아니라면 기존 단어 뒤집기와 동일한 로직
                    if (ch == ' ') {
                        while (!stack.empty()) {
                            bw.write(stack.pop());
                        }
                        bw.write(ch);
                    } else {
                        stack.push(ch);
                    }
                }
            }
            while (!stack.empty()) {
                bw.write(stack.pop());
            }
            bw.flush();
        }
    }

    足りないところ

  • タグの中の文字を区別するためのタグ変数
  • とは思わなかった.
  • タグの文字は、
  • を独立して認識できません.