본문 바로가기

[BOJ] - JAVA

[백준] 2675 : 문자열 반복 JAVA 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

        int T = Integer.parseInt(br.readLine());
        
        for(int i=0;i<T;i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int R = Integer.parseInt(st.nextToken());
            String str = st.nextToken();
            
            for(int j=0;j<str.length();j++)
            {
                for(int k=0;k<R;k++){
                    System.out.printf("%c", str.charAt(j));
                }
            }
            System.out.println();
        }
    }
}

1. 테스트케이스의 개수인 T를 입력받는다.

2. 문자를 반복할 횟수 R과 문자열 str을 StringToknizer로 쪼개서 따로 저장한다.

3. 문자열 str의 문자들을 각각 R번씩 반복해 출력한다.

위 코드는 필자가 이러한 순서로 작성한 코드인데, 더 개선할 수 있는 점이 없을지 다른 분들이 작성한 코드를 찾아보았다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        int T = Integer.parseInt(br.readLine());
        
        for(int i=0;i<T;i++){
            
            String[] str = br.readLine().split(" ");
            int R = Integer.parseInt(str[0]);
            
            for(byte val : str[1].getBytes()){
                for(int j=0;j<R;j++){
                    sb.append((char)val);
                }
            }
            sb.append('\n');
        }
        System.out.print(sb);
    }
}

StringTokenizer를 split으로 대체했고, StringBuilder를 활용해 System.out.printf를 호출하는 횟수를 줄였다.

출력문을 호출하는 횟수를 줄이는 것이 시간 단축에 도움이 많이 되는 것 같다.

StringBuilder를 좀 더 친숙하게 사용할 수 있도록 노력해야겠다.