문제 링크 : 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으로 변환 후 출력
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준] 2908 상수 (설명/코드/정답) (0) | 2024.06.24 |
---|---|
[백준] 1152 단어의 개수 (설명/코드/정답) (0) | 2024.06.18 |
[백준] 10809 알파벳 찾기 (설명/코드/정답) (0) | 2024.06.14 |
[백준] 11720 숫자의 합 (설명/코드/정답) (0) | 2024.06.12 |
[백준] 11654 아스키 코드(설명/코드/정답) (0) | 2024.06.10 |