ETC. 백준 알고리즘 자바 2675 ‘문자열 반복’ 문제풀이
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
- 백준에서 컴파일 에러났던 코드 ( 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(); } } }
- 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(); } } }
- 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(); } }