코딩테스트

[BOJ_9093/JAVA] 단어뒤집기

Eun 2021. 12. 16. 16:09

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

 

9093번: 단어 뒤집기

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

www.acmicpc.net

문제

풀이

단어뒤집기2를 스택으로 풀고 해당 문제를 예전에 풀었지만 스택으로 다시 풀어보았다.

`StringTokenizer`로 공백기준으로 나누고 `charAt()`으로 문자 하나씩 가져와 스택에 push.

그리고 다시 pop을 해주고 `StringBuilder`에 저장하였다. 그러면 스택 특성으로 문자가 거꾸로 출력되어 저장한다.

코드

⬇️기존 코드(스택 사용 x)

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

public class BOJ9093 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st;
		
		StringBuilder sb = new StringBuilder();
		
		int num = Integer.parseInt(br.readLine());		
		
		for(int i=0;i<num;i++) {
			st = new StringTokenizer(br.readLine());	
			
			while(st.hasMoreTokens()) {					
				String s = st.nextToken();				
				int size = s.length();
				
				for(int j=0;j<size;j++) {
					sb.append(s.charAt((size-1)-j));
				}
				sb.append(" ");
			}
			sb.append("\n");
		}
		System.out.println(sb);
	}

}

⬇️스택 사용 코드

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

public class BOJ9093_2 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		StringTokenizer st;
		Stack<Character> stack = new Stack<>();
		
		int num = Integer.parseInt(br.readLine());
		
		for(int k=0;k<num;k++) {
			st = new StringTokenizer(br.readLine());
			int i=0;
			
			while(st.hasMoreTokens()) {
				
				String token =st.nextToken();
				int size=token.length();
				
				for(int j=0;j<size;j++) {
					stack.push(token.charAt(j));
				}
				
				for(int j=0;j<size;j++) {
					sb.append(stack.pop());
				}
				sb.append(" ");
				i++;
			}
			sb.append("\n");
		}
		
		System.out.println(sb);
	}

}