[JAVA]백준 알고리즘/단계별 - 문자열

[JAVA]백준 알고리즘 2675번 : 문자열 반복

코린이J 2023. 1. 12. 02:57
728x90

https://www.acmicpc.net/problem/2675

 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net

문제

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

 

풀이

문자열을 반복하여 출력하는 문제이다.

백준 알고리즘 2438번 : 별 찍기 - 1문제와 유사하여, 풀이 방법도 비슷하다.

String 클래스의 charAt() 메서드와 같이 사용하면 어렵지 않게 해결할 수 있다.

 


🔔 자세한 코드 설명은 더보기 란에 작성하였습니다.

더보기

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

int T = Integer.parseInt(br.readLine());

 

2. T만큼 반복문을 돌린다. (2-*번의 코드는 이 반복문 안의 코드이다.)

for(int i = 0; i < T; i++) {

 2-1. 입력된 정보를 BufferedReader 클래스와 StringTokenizer 클래스를 이용하여 가공한다. (st : StringTokenizer 클래스, br : BufferedReader 클래스, R : 반복할 횟수, S : 입력된 문자열)

st = new StringTokenizer(br.readLine());
int R = Integer.parseInt(st.nextToken());
String S = st.nextToken();

 2-2. 문자열의 길이만큼 반복문을 돌린다. (2-2-*번의 코드는 이 반복문 안의 코드이다.)

for(int j = 0; j < S.length(); j++) {

2-2-1. R만큼 반복문을 돌려서 j번째 문자를 R번 sb에 넣는다. (sb : StringBuilder 클래스 객체) 이 과정에서 charAt() 메서드를 사용하였다.

for(int k = 0; k < R; k++) {
    sb.append(S.charAt(j));
}

2-3. 줄 바꿈을 한다.

sb.append("\n");

 

3-1. sb를 출력한다.

System.out.println(sb);

코드

BufferedReader 클래스 StringBuilder 클래스를 이용한 코드

import java.io.*;
import java.util.StringTokenizer;

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

        int T = Integer.parseInt(br.readLine());

        for(int i = 0; i < T; i++) {
            st = new StringTokenizer(br.readLine());
            int R = Integer.parseInt(st.nextToken());
            String S = st.nextToken();

            for(int j = 0; j < S.length(); j++) {
                for(int k = 0; k < R; k++) {
                    sb.append(S.charAt(j));
                }
            }
            sb.append("\n");
        }
        System.out.println(sb);
    }
}

 

틀린 부분이 있다면 정정해 주시면 감사하겠습니다.
궁금한 부분이 있거나, 다른 아이디어가 있으시면 자유롭게 댓글 남겨주세요!

728x90