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

[백준 9093] 단어 뒤집기 - 자바

by binghe819 2020. 4. 23.

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

 

9093번: 단어 뒤집기

문제 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다. 출력 각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어

www.acmicpc.net


1. 풀이

스택을 이용하면 쉽게 풀이할 수 있는 문제입니다.

 

자바의 Scanner로 풀다가 nextLine()에서 짜증났지만, 그래도 해결법(??)을 찾아 Scanner로도 풀고

Scanner는 nextInt()를 하면 띄워쓰기를 기준으로 입력값을 받아들이고,

개행문자인 \n이 그대로 남아있어

그 다음의 nextLine()을 쓰면 nextLine()이 씹히게 됩니다.

해결방법(?)은 nextInt()뒤에 nextLine()을 하나 붙여줌으로써 해결했습니다.

메모리와 시간을 줄이기위해서 버퍼를 이용해서도 풀이해봤습니다.

 

주의 할 점은 문자열을 입력할 때마다 마지막에 "\n"이나 공백(" ")을 넣어줘야합니다. 

 

scanner를 사용할 때는 공백으로 해도 되지만, 버퍼를 사용한다면 공백도 통과는 되지만 예제와 똑같은 출력을 하려면 "\n"을 추가해줘야 합니다.

2. 코드

2.1 scanner

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int num = sc.nextInt();
		Stack<Character> stack = new Stack<Character>();
		sc.nextLine();
		
		while(num-- > 0) {
			String input = sc.nextLine()+" ";
			for(int i = 0; i < input.length(); i++) {
				if(input.charAt(i) == ' ') {
					while(!stack.isEmpty()) {
						System.out.print(stack.pop());
					}
					System.out.print(" ");
				} else
					stack.push(input.charAt(i));
			}
			System.out.println();
		}
		
		sc.close();
		return;
	}
}

2.2 Buffer

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

public class Main {

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

'알고리즘 > 백준' 카테고리의 다른 글

[백준 1874] 스택 수열 - 자바  (0) 2020.04.24
[백준 9012] 괄호 - 자바  (0) 2020.04.23
[백준 10828] 스택 - 자바  (0) 2020.04.23
[백준 1924] 2007년  (0) 2020.04.11
[백준 1697] 숨바꼭질 - 자바  (0) 2020.04.05

댓글