9093/단어 뒤집기

문제

문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 공백이 하나 있다.

출력

각 테스트 케이스에 대해서, 입력으로 주어진 문장의 단어를 모두 뒤집어 출력한다.

풀이

java.util에서 제공하는 함수들을 쓰면 쉽게 해결될 것 같았다. Collections.reverse()나 str.split()을 써서 쉽게 해결하였다. java.util로 짜는게 시간이나 메모리를 덜 잡아먹을 거라고 생각했다. 하지만 다른사람들이 문제를 푼 것과 배교해서 시간은 3~4배, 메모리는 10배 정도 더 잡아먹었다. 그냥 간단하게 내가 로직을 작성해서 문제를 해결할 수 있는 경우라면 직접 로직을 짜는게 시간이나 메모리를 고려했을 때 더 빠를 것 같다. 너무 java.util만 맹신하면 안되겠다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t;
        String str;
        StringBuilder sb = new StringBuilder();

        t = Integer.parseInt(br.readLine());

        for(int i = 0; i<t;i++){
            str = br.readLine();
            String[] words = str.split(" ");
            for(int j = 0; j<words.length;j++){
                List<String> wordList = Arrays.asList(words[j].split(""));
                Collections.reverse(wordList);
                String[] word = wordList.toArray(new String[wordList.size()]);
                for(int k = 0; k< word.length;k++){
                    sb.append(word[k]);
                }
                sb.append(" ");
            }
            sb.append("\n");
        }

        System.out.println(sb.toString());
    }
}

좋은 웹페이지 즐겨찾기