제목
시간제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1초 | 128 MB | 32726 | 17180 | 12941 | 53.273% |
문제
문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.
출력
각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.
예제 입력
2
I am happy today
We want to win the first prize
예제 출력
I ma yppah yadot
eW tnaw ot niw eht tsrif ezirp
문제 풀이
문제 풀이의 핵심은 메서드를 잘 다루는 것인것 같다.
"나는야 최고"라는 문자열을 입력했다면 "야는나 고최"를 출력해주면 되는 문제다.
따라서 띄어쓰기를 기준으로 나뉘어진 문자열을 역순으로 출력하면 쉽게 풀 수 있는 문제였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class ReverseEx {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine()); // 입력받을 정수
StringBuilder sb = new StringBuilder(); // 입력할 내용
for (int i = 0; i < num; i++) {
StringTokenizer st = new StringTokenizer(br.readLine()); //띄어쓰기를 기준으로 문자열 분리
while (st.hasMoreTokens()) { // 남아 있는 토큰이 있으면 true
StringBuilder str = new StringBuilder(st.nextToken()); // 띄어쓰기를 기준으로 나눠진 문자열이 str에 담겨짐
sb.append(str.reverse() + " "); // 담겨진 문자열 역순으로 저장 및 띄어쓰기
}
sb.append("\n"); // 개행하여 출력된 결과물 나눠주기
}
System.out.println(sb);
}
}
hasMoreTokens() 메서드는 StirngTokenizer에 토큰이 남아있는지 여부를 확인하는 메서드이다. 따라서, 토큰이 남아있다면 true값으로 진행된다.
위 코드의 핵심은 StringTokenizer은 split()과 비슷하게 활용할 수 있다는 것이다. 물론 StringTokenizer는 문자열을 기준으로 나누지만 split()은 정규표현식을 기준으로 구분한다는 차이점이 있기 때문에 차이가 있다.
회고
문제는 쉬운 편이었지만 StirngTokenizer와 StringBuilder를 다뤄보니 이제껏 배운 것들에서 크게 다르지 않다는 것을 알게됐다.
다만, 이전까지의 학습에서는 속도와 효율성과는 별개로 기능구현에만 초점을 두었기 때문에 해당 클래스에 대해 깊게 알아볼 필요가 적었지만, 코딩테스트를 진행하며, 왜 깊게 공부하는 것이 중요한지 알 수 있었다.
'백준 > Bronze' 카테고리의 다른 글
백준 1546 문제 회고 (0) | 2022.10.16 |
---|---|
[코딩테스트] 백준 18108번 (0) | 2022.09.11 |
[코딩테스트] 백준 10926번 (0) | 2022.09.11 |
[코딩테스트] 백준 10869번 (0) | 2022.09.10 |
[코딩테스트] 백준 1008번 (0) | 2022.09.10 |