개발자 미니민의 개발스터디

[백준 JAVA] 17413번 풀이 - 단어 뒤집기2 (크게 보고 큰 틀을 잡자)

by mini_min

package quiz;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class _17413 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        Stack<Character> stack = new Stack<>();

        StringBuilder sb = new StringBuilder();
        for(int i=0; i<s.length(); i++){

            if(s.charAt(i)=='<'){
                sb.append(s.charAt(i));
                for(int j=i+1; j<s.length(); j++){
                    if(s.charAt(j)=='>'){
                        i = j;
                        sb.append(">");
                        break;
                    } else {
                        sb.append(s.charAt(j));
                    }
                }
            } else {
                if(s.charAt(i)!=' '){
                    stack.push(s.charAt(i));
                } else if(s.charAt(i)==' '){
                    while(!stack.isEmpty()){
                        sb.append(stack.pop());
                    }
                    sb.append(s.charAt(i));
                }

                //마지막.
                if(s.length()==i+1 || s.charAt(i+1)=='<'){
                    while(!stack.isEmpty()){
                        sb.append(stack.pop());
                    }
                }
            }
        }
        System.out.println(sb);
    }
}

 

풀이

실버 3 난이도 문제이고 전에 단어 뒤집기 문제를 풀어서

금방 풀 줄 알았는데 생각보다 오래 걸린 문제였다. 

 

 

가장 힘들었던 부분. 
'<' 부터 '>' 까지 의 문자열을 어떻게 처리할지

 

몇 번의 시행착오 끝에 

문자가 '<' 인 경우 다음 문자(i+1)부터 '>' 문자가 나올 때 까지 for 문으로 StringBuilder 에 찍는 방법을 찾아냈다.

그렇게 if 조건 경우의 수는 2가지 ( 1.< 인 경우  2.그렇지 않은 경우 )

😶 답을 찾기 전에는 if 조건이 엄청 많았다.... 큰 틀을 잘 잡자....

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기