| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- LIS
- 백준
- Python
- 백트래킹
- oracle
- 프로그래머스
- 아스키코드
- DP
- 구현
- 빅데이터
- BFS
- BufferedReader
- 브루트포스
- 알고리즘
- SQL
- 다리 만들기
- Stack
- 배열
- 완전탐색
- dfs
- 그리디
- 새벽코딩
- 문자열
- Queue
- 스택
- 다이나믹프로그래밍
- 시뮬레이션
- Java
- HashMap
- 탐색
													Archives
													
											
												
												- Today
- Total
새벽코딩
[백준] [12605] 단어순서 뒤집기 (stack) (JAVA) 본문
반응형
    
    
    
  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)를 이용했다.
-새벽코딩-
반응형
    
    
    
  '알고리즘' 카테고리의 다른 글
| [백준] [2206] 벽 부수고 이동하기 (BFS) (JAVA) (0) | 2023.01.04 | 
|---|---|
| [백준] [7562] 나이트의 이동 (BFS) (JAVA) (0) | 2023.01.04 | 
| [백준] [17608] 막대기 (구현) (JAVA) (0) | 2023.01.03 | 
| [백준] [16948] 데스 나이트 (BFS) (JAVA) (0) | 2023.01.03 | 
| [백준] [3184] 양 (BFS) (JAVA) (0) | 2023.01.01 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				 
								 
								 
								