본문 바로가기
Language/Java

[백준 | Java] 2675번 문자열 반복

by ㅇ달빛천사ㅇ 2025. 1. 15.
728x90
2675번 / 문자열 반복

문자열 반복

🏷️ 관련 주제 : 입출력



문제

문자열 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. BufferedReaderBufferedWriter, StringTokenizer를 이용한 문자 입출력

  1. 테스트 케이스 T를 정수로 변환하여 입력 받음.
  2. 0 ~ (T - 1) 동안 반복문을 돌며 StringTokenizerR S를 입력 받음.
    • nextToken() 메서드로 R 값 문자열로 받아서 int 형으로 변환
    • StringTokenizer의 메서드 중에 특정 구분자(delim) 가지고 구분하여 다음 토큰을 String으로 반환하는 nextToken(String delim)이라는 메서드 이용하여 StringTokenizerhasMoreTokens()가 true인 동안 nextToken("")로 문자열을 한글자씩 받기 (s)
  3. 반복문을 이용하여 Rbw.write()s를 쓰기
  4. 반복문이 끝나면 bw.newLine() 실행하여 줄 바꿈.
  5. 모든 테스트 케이스에 대한 반복문이 끝나면 bw.close()를 이용하여 문자열 출력

❌ 틀렸습니다.

백준에 제출하기 전에 VSCode에서 입출력 예제를 실행해 보았는데

AAABBBCCC
/////HHHHHTTTTTPPPPP

이렇게 출력되어야 하는 문자열이

 ABC ABC ABC
 /HTP /HTP /HTP /HTP /HTP

이렇게 출력되었다.
아무래도 nextToken("")이 내가 생각한 것과는 다르게 문자 한개씩 가져오는 것이 아니라 공백으로 구분된 문자열을 통째로 가져오는 것 같다.

Try02. RSnextToken()으로 받고 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