[백준_12605] 단어순서 뒤집기

MyungHwan Kim·2022년 7월 15일

백준

목록 보기
14/39
post-thumbnail

문제

백준 12605번
https://www.acmicpc.net/problem/12605

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

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

  • N = 5
  • 1 ≤ L ≤ 25

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

  • 생각해보기

Code

  • 전체 케이스 갯수를 N에 담아준다.
  • for문을 통해 N만큼 반복한다.
  • 반복하면서 Stack을 만들어 입력받은 문자열에 대해 " "구분하여 넣어준다.
  • 결과물을 담아줄 StringBuilder를 생성한다.
  • 기본적으로 "Case # 번호: "구조를 StringBuilder에 추가한다.
  • stack이 빌 때까지 while문을 돌면서 stack에서 꺼내어 StringBuilder에 넣어준다.
  • 꺼낸 후 stack이 비어있지 않다면 " "(띄어쓰기)도 넣어준다.
  • stack이 빌 경우 break로 while문을 탈출한다.
  • for문 한 바퀴 돌 때마다 sb.toString()으로 결과를 반환한다.

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 = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken()); // 전체 케이스 개수

        for (int i = 0; i < N; i++) {
            Stack<String> stack = new Stack<>();
            // 띄어쓰기 구분으로 문자열을 stack에 넣기
            stack.addAll(Arrays.asList(br.readLine().split(" ")));

			// 결과를 담을 StringBuilder
            StringBuilder sb = new StringBuilder(); 
            
            // case 번호에 맞는 기본 구조
            sb.append("Case #").append(i + 1).append(": ");
            while (!stack.isEmpty()) {
                sb.append(stack.pop());

				// stack이 비었을 경우
                if (stack.isEmpty()) {
                    break;
                }
                // 띄어쓰기로 구분하여 없앴던 부분을 다시 넣어주기
                sb.append(" ");
            }
            //결과 출력
            System.out.println(sb.toString());
        }
    }
}
profile
Back-end 개발자가 되기 위한 개발 노트(Java)

0개의 댓글