실습/백준

문자열 반복 - 2675번 (Java 풀이)

chobyeonggyu03 2024. 7. 17. 11:31
반응형

 

문제

문자열 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]);
		}

	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형