코딩테스트
[BOJ_9093/JAVA] 단어뒤집기
Eun
2021. 12. 16. 16:09
https://www.acmicpc.net/problem/9093
9093번: 단어 뒤집기
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는
www.acmicpc.net
문제
풀이
단어뒤집기2를 스택으로 풀고 해당 문제를 예전에 풀었지만 스택으로 다시 풀어보았다.
`StringTokenizer`로 공백기준으로 나누고 `charAt()`으로 문자 하나씩 가져와 스택에 push.
그리고 다시 pop을 해주고 `StringBuilder`에 저장하였다. 그러면 스택 특성으로 문자가 거꾸로 출력되어 저장한다.
코드
⬇️기존 코드(스택 사용 x)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ9093 {
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
for(int i=0;i<num;i++) {
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()) {
String s = st.nextToken();
int size = s.length();
for(int j=0;j<size;j++) {
sb.append(s.charAt((size-1)-j));
}
sb.append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}
⬇️스택 사용 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class BOJ9093_2 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
Stack<Character> stack = new Stack<>();
int num = Integer.parseInt(br.readLine());
for(int k=0;k<num;k++) {
st = new StringTokenizer(br.readLine());
int i=0;
while(st.hasMoreTokens()) {
String token =st.nextToken();
int size=token.length();
for(int j=0;j<size;j++) {
stack.push(token.charAt(j));
}
for(int j=0;j<size;j++) {
sb.append(stack.pop());
}
sb.append(" ");
i++;
}
sb.append("\n");
}
System.out.println(sb);
}
}