백준 17413 단어뒤집기2

Eunkyung·2021년 10월 30일
0

Algorithm

목록 보기
4/30

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

문제해결

단어뒤집기1 문제의 응용버전으로 크게 태그 안에 있는 단어인지 태그 밖에 있는 단어인지 구분하는 것이 이 문제의 포인트이다.

  1. 태그 안에 있는 단어인지 아닌지 구분하기 위해 tag 변수 선언
  2. if '<' then tag = true, 스택이 빌 때까지 스택에서 pop()
  3. if '>' then tag = false, 그대로 출력
  4. if 태그 안에 있는 단어라면 그대로 출력
  5. else 태그 밖에 있는 단어라면
  6. 스택에 push()
  7. 공백을 만난다면 스택이 빌 때까지 스택에서 pop()
  8. 반복문이 종료되었을 때 마지막 문자열을 출력하기 위해 스택이 빌 때까지 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();
    }
}

부족했던 점

  • 태그 안에 있는 문자를 구분하기 위한 tag 변수 생각하지 못함
  • 태그 안에 있는 문자를 구분하는 과정을 혼자 구현하지 못했음
profile
꾸준히 하자

0개의 댓글