본문 바로가기

개발공부/알고리즘

백준 9093번 - 단어 뒤집기 [자료구조 1/자바 JAVA]

반응형

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

 

백준 9093번


 

사고방식

입력값에 는 테스트 케이스의 개수, 그 개수만큼의 문장들이 주어진다. 

각 문장들을 어절 단위로 잘라 어절 내에서 순서를 거꾸로 하여 출력하면 되는 문제이다. 

 

전체 문장 자체를 거꾸로 하는 것이 아니라 어절 별로 순서는 바꾸지 않되 어절 내에서는 순서가 거꾸로 되어야하는 점에 유의하여 풀면 되는 문제 같다. 

 

- BufferedReader과 BuefferedWriter을 통해 값을 받고 쓸 준비를 한다. 

 

- 값을 받을 때는 LIFO, 즉 나중에 들어간 것이 먼저 나오는 스택을 사용한다. 

 

- Character 단위로 값을 받아서 스택에 넣다가 띄어쓰기 혹은 엔터가 있을 경우, Character 단위로 출력하기 시작한다. 

 

- 스택에 넣은 값을 모두 출력하여 스택이 비면 다시 다음 Character 단위로 값을 스택에 받기 시작한다. 

 

- 입력값 첫 줄에 있는 숫자만큼 반복하여 값을 받으면 된다. 

 


결론 

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

public class Main {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        BufferedWriter bw = new BufferedWriter (new OutputStreamWriter(System.out));
        
        while(n-- >0){
            Stack<Character> stack = new Stack<>();
            String str = br.readLine() +"\n";
            for(char ch : str.toCharArray()){
                if(ch==' ' || ch=='\n'){
                    while(!stack.isEmpty()){
                        bw.write(stack.pop());
                    }
                    bw.write(ch);
                }
                else stack.push(ch);
            }
        }
        bw.flush();
    }
}

 

 

 

 

반응형