728x90
❓ 문자열 반복
🏷️ 관련 주제 : 입출력

문제
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.
QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$%*+-./: 이다.
입력
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.
출력
각 테스트 케이스에 대해 P를 출력한다.
예제 입력 1
2
3 ABC
5 /HTP
예제 출력 1
AAABBBCCC
/////HHHHHTTTTTPPPPP
출처

ICPC > Regionals > North America > Greater New York Region > 2011 Greater New York Programming Contest A번
- 문제를 번역한 사람: baekjoon
- 문제의 오타를 찾은 사람: jh05013
- 잘못된 데이터를 찾은 사람: pichulia
💦 나의 시도
Try01. BufferedReader
와 BufferedWriter
, StringTokenizer
를 이용한 문자 입출력
- 테스트 케이스
T
를 정수로 변환하여 입력 받음. - 0 ~ (T - 1) 동안 반복문을 돌며
StringTokenizer
로R S
를 입력 받음.nextToken()
메서드로R
값 문자열로 받아서 int 형으로 변환StringTokenizer
의 메서드 중에 특정 구분자(delim) 가지고 구분하여 다음 토큰을 String으로 반환하는nextToken(String delim)
이라는 메서드 이용하여StringTokenizer
에hasMoreTokens()
가 true인 동안nextToken("")
로 문자열을 한글자씩 받기 (s
)
- 반복문을 이용하여
R
번bw.write()
로s
를 쓰기 - 반복문이 끝나면
bw.newLine()
실행하여 줄 바꿈. - 모든 테스트 케이스에 대한 반복문이 끝나면
bw.close()
를 이용하여 문자열 출력
❌ 틀렸습니다.
백준에 제출하기 전에 VSCode에서 입출력 예제를 실행해 보았는데
AAABBBCCC
/////HHHHHTTTTTPPPPP
이렇게 출력되어야 하는 문자열이
ABC ABC ABC
/HTP /HTP /HTP /HTP /HTP
이렇게 출력되었다.
아무래도 nextToken("")
이 내가 생각한 것과는 다르게 문자 한개씩 가져오는 것이 아니라 공백으로 구분된 문자열을 통째로 가져오는 것 같다.
Try02. R
과 S
를 nextToken()
으로 받고 S.split("")
을 하여 for-each문에서 한 글자씩 R
번 반복해서 출력(bw.write(s);
)
🎉드디어 성공!🎉
- 메모리 : 11564 KB
- 시간 : 64 ms

💯 해결 방법
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
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 S = st.nextToken();
for (String s : S.split("")) {
for (int j = 0; j < R; j++) {
bw.write(s);
}
}
bw.newLine();
}
bw.close();
}
}
🏷️ 문제 풀면서 참고한 블로그
728x90