본문 바로가기
알고리즘/백준 Baekjoon

백준 9093번 단어 뒤집기(JAVA)

by 꾸준함 2022. 12. 27.

백준 9093번

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

 

9093번: 단어 뒤집기

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는

www.acmicpc.net

 

문제설명

테스트 케이스의 개수를 입력받고, 그 만큼 반복하며 문자열을 입력받는다.

그 후, 단어를 기준으로 뒤집어서 출력하는 프로그램을 작성.

 

 

 

접근

1. 단어 기준이므로 공백을 기준으로 데이터를 쪼개야 할 것같다고 생각을함.

2. 공백을 기준으로 하여 단어별로 뒤집어야하니 am이 입력될 시 ma로 후입선출 LIFO가 일어남. -> Stack을 사용하면 될것 같다고 생각함.

 

 

코드

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

public class Main{
    public static void main(String args[]) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        for(int i=0;i<n;i++){
            Stack<Character> stk = new Stack<>();
            String s=bf.readLine();
            StringBuilder sb = new StringBuilder();
            for(int j=0;j<s.length();j++){
            	if(s.charAt(j) == ' ') {
            		while(!stk.empty()) {
            			sb.append(stk.pop());
            		}
            		sb.append(" ");
            	}else {
                    stk.push(s.charAt(j));
            	}
            }
    		while(!stk.empty()) {
    			sb.append(stk.pop());
    		}
    		System.out.println(sb);
        }
    }
}

풀이

1. Charcter형 Stack을 선언

2. 문자열을 입력받고 문자하나씩 Stack에 저장

3. 문자열 길이만큼 반복문을 돌며 Stack에 값을 하나씩 넣고 공백을 만나면 지금까지 Stack에 저장된  값들을 pop해주며 뒤집어서 StringBuilder에 추가 후에 공백 추가.

4. 마지막단어 뒤에는 공백이 없으므로 for문 이후 한번더 Stack에 저장된 값들을 하나씩 뒤집어서  StringBuilder에 추가

5. 마지막 출력.