[백준][17413번] 단어뒤집기2

Updated:

내가 푼 코드

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        Stack<Character> st = new Stack<>();
        String str = sc.nextLine() + '\n';
        StringBuilder answer = new StringBuilder();
        boolean isIn = false;

        for(int i=0; i<str.length(); i++){
            char ch = str.charAt(i);
            if(!isIn && Character.isWhitespace(ch) || ch == '\n' || ch == '<'){
                while(!st.empty()){
                    answer.append(st.pop());
                }

                if(ch == '<') // 괄호시작
                    isIn = true;

                answer.append(ch);
            }else if(ch == '>'){ // 괄호 끝
                answer.append(ch);
                isIn = false;
            }
            else if(isIn){ // 괄호 안이면 그대로 answer에 넣는다.
                answer.append(ch);
            }else{ // 괄호 밖이면 stack에 넣어둔다.
                st.push(ch);
            }
        }
        System.out.println(answer);
    }
}

나의 풀이법

먼저 괄호 안인지 밖인지 구분이 필요하므로 변수 isIn에 선언하여 false인지 true인지에 따라서 나눠 구분했다.

isIn이 true일때는 stack에 넣을필요없이 답을 출력

isIn이 false일때는 stack에 넣어서 나중에 뒤집는다.

다른 풀이

import java.util.*;
import java.io.*;

public class Main {
    static void print(BufferedWriter bw, Stack<Character> s) throws IOException {
        while (!s.isEmpty()) {
            bw.write(s.pop());
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str = bf.readLine();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        boolean tag = false;
        Stack<Character> s = new Stack<>();
        for (char ch : str.toCharArray()) {
            if (ch == '<') {
                print(bw, s);
                tag = true;
                bw.write(ch);
            } else if (ch == '>') {
                tag = false;
                bw.write(ch);
            } else if (tag) {
                bw.write(ch);
            } else {
                if (ch == ' ') {
                    print(bw, s);
                    bw.write(ch);
                } else {
                    s.push(ch);
                }
            }
        }
        print(bw, s);
        bw.write("\n");
        bw.flush();
    }
}

느낀점

for(int i=0; i<str.length(); i++){
            char ch = str.charAt(i);
 }

이 부분을 좀더 축약이 가능했다.

 for (char ch : str.toCharArray()) {
 }

Leave a comment