새벽코딩

[백준] [12605] 단어순서 뒤집기 (stack) (JAVA) 본문

알고리즘

[백준] [12605] 단어순서 뒤집기 (stack) (JAVA)

J 코딩 2023. 1. 4. 00:18
반응형

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

 

12605번: 단어순서 뒤집기

스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만

www.acmicpc.net


문제

스페이스로 띄어쓰기 된 단어들의 리스트가 주어질때, 단어들을 반대 순서로 뒤집어라. 각 라인은 w개의 영단어로 이루어져 있으며, 총 L개의 알파벳을 가진다. 각 행은 알파벳과 스페이스로만 이루어져 있다. 단어 사이에는 하나의 스페이스만 들어간다.

입력

첫 행은 N이며, 전체 케이스의 개수이다.

N개의 케이스들이 이어지는데, 각 케이스는 스페이스로 띄어진 단어들이다. 스페이스는 라인의 처음과 끝에는 나타나지 않는다. N과 L은 다음 범위를 가진다.

  • N = 5
  • 1 ≤ L ≤ 25

출력

각 케이스에 대해서, 케이스 번호가 x일때  "Case #x: " 를 출력한 후 그 후에 이어서 단어들을 반대 순서로 출력한다.

예제 입력 1 복사

3
this is a test
foobar
all your base

예제 출력 1 복사

Case #1: test a is this
Case #2: foobar
Case #3: base your all

※ JAVA 코드 (단어순서 뒤집기)

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));
		StringTokenizer st;
		StringBuilder sb;
		Stack<String> stack = new Stack<>();
		
		int N = Integer.parseInt(br.readLine());
		
		for(int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine());
			
			sb = new StringBuilder();
			// 입력토큰이 존재할때까지 반복해 스택에 적재
			while(st.hasMoreTokens()) {
				stack.add(st.nextToken());
			}
			
			// 스택에 적재된 반대로 stringBuilder에 합친다
			while(!stack.isEmpty()) {
				sb.append(stack.pop() + " ");
			}
			
			// 마지막 공백 제거
			sb.deleteCharAt(sb.length() - 1);
			
			System.out.println("Case #" + i + ": " + sb);
		}	
	}
}

※ 생각정리 (단어순서 뒤집기)

단어순서 뒤집기 문제는 스택을 이용하여 쉽게 풀 수 있는 문제이다.

입력받은 문자열의 각 단어를 토큰별로 끊어서 스택에 담은 다음 스택의 상단 (stack.peek()) 부터 뽑아내어 StringBuilder에 담아 문자열을 단어별로 거꾸로 뒤집어 담았다.

이때 마지막 공백 제거를 위해서  sb.deleteCharAt(sb.length() - 1)를 이용했다.

-새벽코딩-

반응형
Comments