본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[boj] 백준 17413 단어 뒤집기 (Java) - 스택

[문제]

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

 

17413번: 단어 뒤집기 2

문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('<', '>')로만 이루어져

www.acmicpc.net

 

[풀이]

스택을 이용해서 태그가 아닌 단어가 나오면 뒤집어서 저장해준다.

 

[코드]

 

package heap_stack_dequeue;

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

public class boj_17413_단어뒤집기 {
    static String s;
    public static void main(String[] args) throws Exception{
        Scanner scan = new Scanner(System.in);
        s = scan.nextLine();

        StringBuilder sb = new StringBuilder();

        int idx = 0;
        Stack<Character> stack = new Stack<>();
        while(idx<s.length()){
            //< tag가 나오면 > 나올 때까지 sb에 이동
            if(s.charAt(idx)=='<'){
                while(true){
                    sb.append(s.charAt(idx++));
                    if(s.charAt(idx)=='>'){
                        sb.append(s.charAt(idx));
                        idx++;
                        break;
                    }
                }
            }
            else if(s.charAt(idx)==' ') {
                sb.append(' ');
                idx++;
            }
            else{
                //단어가 나오면 뒤집기
                while(idx<s.length() && s.charAt(idx)!=' ' && s.charAt(idx)!='<'){
                    stack.push(s.charAt(idx++));
                }
                
                while(!stack.isEmpty()){
                    sb.append(stack.pop());
                }
            }
        }

        System.out.println(sb.toString());
    }
    
}