문제
문자열 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
해당 문제를 처음 봤을 때 가장 먼저 떠올랐던 풀이 방법은 처음에 숫자를 입력받고, 문자열을 charAt을 활용해 각각의 문자로 접근 하여 반복문을 통해 입력받은 숫자만큼 루프를 돌며 각자리의 문자들을 출력하는 로직이었기에, 해당 방법으로 풀이를 진행해보았다.
package BAEKJOON_2675;
/*
날짜 : 2024.07.17.수
내용 : 백준 2675번 (문자열 반복)
*/
import java.util.*;
public class BAEKJOON_2675 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 전체 입력받을 횟수 정하는 변수 n 선언
for(int i=0; i<n; i++) {
int m = sc.nextInt(); // 각각의 문자열을 몇번 반복할 것인지 정하는 변수 m 선언
String str = sc.nextLine(); // 반복시킬 문자열 입력받기
for (int h=0; h< str.length(); h++) {
for(int k=0; k < m; k++) { // m번만큼 각자리의 문자들 반복해서 출력하기
System.out.printf("%c", str.charAt(h)); // m번씩 반복하여 str의 길이만큼 해당문자들 반복해서 출력
}
}
}
}
}
이번에도 저번과 같이 이중 for문 내에서 바로 출력하는 로직으로 구현하였더니 출력형식이 다르다는 에러가 발생하였다. 이번에도 이를 해결하기 위해 결과값들을 String배열에 담아뒀다가 출력하는 형태로 바꿔 해결해보았다.
package BAEKJOON_2675;
/*
날짜 : 2024.07.17.수
내용 : 백준 2675번 (문자열 반복)
*/
import java.util.*;
public class BAEKJOON_2675 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 전체 입력받을 횟수 정하는 변수 n 선언
String[] arr = new String[n]; // 최종 출력형태를 맞추기 위해 최종 결과값 잠시담아둘 Stirng배열 arr 선언
for(int i=0; i<n; i++) {
String result = ""; // 최종 출력 결과값 담아둘 result 변수 선언
int m = sc.nextInt(); // 각각의 문자열을 몇번 반복할 것인지 정하는 변수 m 선언
String str = sc.nextLine(); // 반복시킬 문자열 입력받기
for (int h=0; h< str.length(); h++) {
for(int k=0; k < m; k++) { // Stirng 배열에 최종결과값 담워뒀다가 한꺼번에 출력하기 (출력형태 맞춰주기 위해서)
result += str.charAt(h);
}
}
arr[i] = result;
}
for (int i=0; i<n; i++) { // 최종 결과값들 출력
System.out.println(arr[i]);
}
}
}
마지막으로 위의 화면처럼 숫자 다음의 공백도 포함되어 출력되는 걸 방지하기위해 trim을 활용해 공백을 없애주었다.
package BAEKJOON_2675;
/*
날짜 : 2024.07.17.수
내용 : 백준 2675번 (문자열 반복)
*/
import java.util.*;
public class BAEKJOON_2675 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 전체 입력받을 횟수 정하는 변수 n 선언
String[] arr = new String[n]; // 최종 출력형태를 맞추기 위해 최종 결과값 잠시담아둘 Stirng배열 arr 선언
for(int i=0; i<n; i++) {
String result = ""; // 최종 출력 결과값 담아둘 result 변수 선언
int m = sc.nextInt(); // 각각의 문자열을 몇번 반복할 것인지 정하는 변수 m 선언
String str = sc.nextLine().trim(); // 반복시킬 문자열 입력받기
for (int h=0; h< str.length(); h++) {
for(int k=0; k < m; k++) { // Stirng 배열에 최종결과값 담워뒀다가 한꺼번에 출력하기 (출력형태 맞춰주기 위해서)
result += str.charAt(h);
}
}
arr[i] = result;
}
for (int i=0; i<n; i++) { // 최종 결과값들 출력
System.out.println(arr[i]);
}
}
}
'실습 > 백준' 카테고리의 다른 글
상수 - 2908번 (Java 풀이) (0) | 2024.07.18 |
---|---|
단어의 개수 - 1152번 (Java 풀이) (0) | 2024.07.17 |
알파벳 찾기 - 10809번 (Java 풀이) (0) | 2024.07.17 |
숫자의 합 - 11720번 (Java 풀이) (0) | 2024.07.16 |
아스키 코드 - 11654번 (Java 풀이) (0) | 2024.07.16 |