백준 17413 단어뒤집기2

이상민·2023년 8월 15일
0

알고리즘

목록 보기
13/128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Flip_Word_2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        StringBuilder sb = new StringBuilder();
        boolean bracket = false;
        Stack<String> stack = new Stack<>();
        for(int i =0; i<str.length(); i++){
            if(str.charAt(i)=='<'){
                while(!stack.isEmpty()) {
                    sb.append(stack.pop());
                }
                bracket = true;
            }
            else if(str.charAt(i)=='>'){
                bracket = false;
                sb.append(">");
                continue;
            }
            if(!bracket){
                if(str.charAt(i)==' '){
                    while(!stack.isEmpty()) {
                        sb.append(stack.pop());
                    }
                    sb.append(' ');
                }
                else{
                    stack.add(String.valueOf(str.charAt(i)));
                }
                if(i == str.length()-1){
                    while(!stack.isEmpty()) {
                        sb.append(stack.pop());
                    }
                }
            }
            else{
                sb.append(str.charAt(i));
            }

        }
        System.out.print(sb);
    }
}

풀이방법

  1. 문자열을 for문을 통해 한글자씩 탐색한다.
  2. 현재 <> 안에 문자인지를 판별하기위해 안에 있다면 bracket=true를 통해 구별한다.
  3. <> 밖에 문자라면 다 뒤집어야 하므로, FILO의 형태로 데이터가 입출력되는 stack을 사용한다.
  4. stack에는 <>밖에서 공백을 만날때까지 넣거나, '<'를 만날때까지 넣거나, 문자열에 맨마지막을 만날때까지 넣는다.
  5. <>안은 그냥 그대로 출력한다.
profile
개린이

0개의 댓글