ETC. 백준 알고리즘 자바 2675 ‘문자열 반복’ 문제풀이

1 minute read

Problem

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code “alphanumeric” 문자만 들어있다. QR Code “alphanumeric” 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$%*+-./: 이다.

Input 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.

Output 각 테스트 케이스에 대해 P를 출력한다.

Solution

System.out.print를 사용하면 코드는 571Byte지만 속도는 88ms, 메모리 13372KB, BufferedWriter를 사용하면 코드는 743Byte이지만 속도는 80ms, 메모리 13300KB이다.

※ eclipse에서는 잘 동작했던 코드가 백준에서 컴파일에러가 났다.

Code

  1. 백준에서 컴파일 에러났던 코드 ( forEach에서 a를 찾을 수 없는 심볼이라 했다…)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
	static String[] tmp; // forEach문에서 접근하기 위해
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(br.readLine());
		
		while(t-- > 0) {
			tmp = br.readLine().split("\\s");
			tmp[1].chars().mapToObj(a -> Character.toString((char)a)).forEach(a -> System.out.print(a.repeat(Integer.parseInt(tmp[0]))));
      System.out.println();
		}
	}
}
  1. System.out.print 사용한 코드
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));
		int t = Integer.parseInt(br.readLine());
		
    String[] tmp;
		while(t-- > 0) {
			tmp = br.readLine().split("\\s");
			for(int i = 0; i < tmp[1].length(); i++) {
				for(int j = 0; j < Integer.parseInt(tmp[0]); j++)
					System.out.print(tmp[1].charAt(i));
			}
			System.out.println();
		}
	}
}
  1. BufferedWriter 사용한 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    int t = Integer.parseInt(br.readLine());
		
    String[] tmp;
		while(t-- > 0) {
			tmp = br.readLine().split("\\s");
			for(int i = 0; i < tmp[1].length(); i++) {
				for(int j = 0; j < Integer.parseInt(tmp[0]); j++)
					bw.write(tmp[1].charAt(i));
			}
			bw.write("\n");
		}
    bw.flush(); bw.close();
	}
}

Tags:

Updated: