9093 - 단어 뒤집기

김성환·2021년 11월 22일
0

코딩테스트

목록 보기
9/12

문제 링크

https://www.acmicpc.net/problem/9093

내 풀이 분석

이 문제는 단순하게 string을 이용해서 split하고 단어를 뒤집어서 반복문을 돌리면 시간초과가 날 것이다. 이 문제는 문자열을 어떻게 효율적으로 다룰것인가 에 대한 문제인 것같다.
그래서 나는 stringbuffer를 이용해서 시간을 최대한으로 줄였다.

import java.util.*;
class Main {
    public static void main(String argv[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        for(int i=0;i<n;i++){
            StringBuffer str = new StringBuffer(sc.nextLine());
            str = str.reverse();
            StringBuffer answer = new StringBuffer("");
            StringBuffer tmp = new StringBuffer("");
            int strLength = str.toString().length();
            String[] strs = new String[strLength];
            int count=0;
            for(int j=0;j<strLength;j++){
                if(str.charAt(j)!=' '){
                    tmp.append(str.charAt(j));
                }
                else{
                    strs[count++]=tmp.toString();
                    tmp = new StringBuffer("");
                }
            }
            strs[count]=tmp.toString();
            for(int j=count;j>=0;j--){
                System.out.print(strs[j]+" ");
            }
            System.out.print("\n");
        }
    }
}

다른 풀이 분석

나의 풀이는 scanner를 이용해 문자열을 입력받았지만 scanner로 입력을 받으면 속도가 느려진다. 왜냐하면 버퍼를 이용하지 않고 키보드에서 입력받은 값 그대로를 전달하기 때문이다.
하지만 BufferedReader의 경우 버퍼를 사용하여 입력을 받기 때문에 속도가 빠르다. 따라서 입력 속도를 빠르게 하고 싶다면 BufferedReader를 사용하는 것이 좋다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));		
		int T = Integer.parseInt(br.readLine());
		for(int t = 0; t < T; t++) {
			StringBuilder sb = new StringBuilder();
			String[] arr = br.readLine().split(" ");
			for(int i = 0; i < arr.length; i++) {
				for(int j = arr[i].length() - 1; j >= 0; j--) {
					sb.append(arr[i].charAt(j));
				}
				sb.append(" ");
			}
			System.out.println(sb);
		}
	}
}

BufferedReader 사용법

BufferedReader의 경우 scanner와 다르게 개행문자 만을 경계로 인식해 입력을 종료한다.(scanner의 경우 개행,띄어쓰기,탭)

BufferedReader 이름 = new BufferedReader(new InputStreamReader(System.in)); // 버퍼 객체 생성
이름.readLine()// 한줄 읽기 입력받은 문자열을 string으로 반환
이름.read() // 한글자 읽기 입력받은 문자를 int로 반환(이 int 값은 아스키코드값)

결론

입력을 빠르게 하고 싶다면 BufferedReader를 이용하자.
문자열을 많이 다룰 예정이라면 stringbuffer나 stringbuilder를 사용하자

profile
개발자가 되고 싶다

0개의 댓글