문제
백준 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());
}
}
}
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준_1927] 최소 힙 (0) | 2023.02.08 |
---|---|
[백준_9461] 파도반 수열 (0) | 2023.02.06 |
[백준_1303] 전투 (0) | 2023.02.01 |
[백준_12865] 평범한 배낭 (0) | 2023.01.30 |
[백준_14725] 개미굴 (0) | 2023.01.19 |