Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/백준

[백준] 2675 문자열 반복 (설명/코드/정답)

_hyeri 2024. 6. 17. 23:53

문제 링크 : https://www.acmicpc.net/problem/2675

 

 

 

 

1. 요구 사항 이해

시간, 메모리 제한 : 1초 / 128 MB

문자열 S를 입력받고 각 문자를 R반복하여 새 문자열 P를 만든 후 출력하는 프로그램 

테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)

테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8)

S의 길이는 적어도 1이며, 20글자를 넘지 않는다.

 

 

2. 설계/검증 


함수화

// 입력을 위한 객체 생성 
Scanner scan = new Scanner(System.in);

// 테스트 케이스 개수 T
int T = scan.nextInt();
(1 ≤ T ≤ 1,000) 유효성 검사 코드 

// 테스트 케이스 반복 횟수
int R = scan.nextInt();
(1 ≤ R ≤ 8) 유효성 검사 코드 

// 문자열 S(공백으로 구분)
String S = scan.next();
S의 길이는 적어도 1이며, 20글자를 넘지 않음 유효성 검사

반복문 (문자열 길이){
    반복문 (R만큼 반복){
		해당 문자
    }
}

새 문자열 P 출력

 

 

복잡도

시간 복잡도  최악의 경우  공간 복잡도
O(T * L * R)   O(L * R)

 

유효성 검사 : O(1)

태스트 케이스 처리 반복문 T번 반복 새로운 문자열 P 생성 : 

문자열 S의 각 문자에 대해 R번 반복, S의 길이를 L이라고 하면 O(L * R)

시간 복잡도는 O(T * L * R)

 

StringBuilder P는 문자열 S의 각 문자를 R번 반복한 길이의 문자열을 저장 P의 최대 크기는 L*R

공간 복잡도는 O(L * R)  

 

주어진 조건(T ≤ 1000, L ≤ 20, R ≤ 8) 내에서는 성능 문제가 없을 것

 

 

 

 

3. 정상 코드

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {

        //입력을 위한 객체 생성
        Scanner scan = new Scanner(System.in);
        // 테스트 케이스의 개수 입력
        int T = scan.nextInt();
        // 테스트 케이스 개수 유효성 검사
        if (T < 1 || T > 1000) {
            System.out.println("테스트 케이스 개수 T, 1 ≤ T ≤ 1,000");
            return;
        }
        // 테스트 케이스 처리
        for (int t = 0; t < T; t++) {
            // 테스트 케이스 반복 횟수
            int R = scan.nextInt();
            // 테스트 케이스 반복 횟수 유효성 검사
            if (R < 1 || R > 8) {
                System.out.println("테스트 케이스는 반복 횟수 R, (1 ≤ R ≤ 8)");
                return;
            }

            // 압력받는 문자
            String S = scan.next();
            // 입력받는 문자 유효성 검사
            if (S.length() < 1 || S.length() > 20) {
                System.out.println("S의 길이는 적어도 1이며, 20글자를 넘지 않는다.");
                return;
            }
            // 새로운 문자열 P 생성
            StringBuilder P = new StringBuilder();
            for (int i = 0; i < S.length(); i++) {
                char c = S.charAt(i);
                for (int j = 0; j < R; j++) {
                    P.append(c);
                }
            }
            // 결과 출력
            System.out.println(P.toString());
        }
        // Scanner 객체 닫기
        scan.close();
    }
}

 

 

 

 

추가 정리

저장 StringBuilder
StringBuilder의 toString() 메서드 : Stringbuilder 객체를 String으로 변환 후 출력