본문 바로가기
algorithm/Baekjoon

[백준] 2675 문자열 반복

by 이쟝 2022. 10. 5.

문제

문자열 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

1. 기본 2중 for문으로 String S의 J번째를 R번 반복해서 출력

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
	    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();  
		int T = Integer.parseInt(br.readLine());
		StringTokenizer st;
		
		for (int i = 0; i < T; i++) {
			st = new StringTokenizer(br.readLine()," ");
			int R = Integer.parseInt(st.nextToken());
			String S = st.nextToken();
            
//			(1) for문으로 string s의 j번째를 R번 반복해서 출력
			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);
	}
}

2. getBytes( )를 사용해서 숫자로 변환한뒤에 다시 char로 변환

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
	    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();  
		int T = Integer.parseInt(br.readLine());
		StringTokenizer st;
		
		for (int i = 0; i < T; i++) {
			st = new StringTokenizer(br.readLine()," ");
			int R = Integer.parseInt(st.nextToken());			
			String S = st.nextToken();

//			(2) getBytes()로 숫자로 변환한뒤에 다시 char로 변환
			for(byte ans:S.getBytes()) {
				for(int j=0;j<R;j++) {
					sb.append((char)ans);
				}
			}
			sb.append("\n");
		}
		System.out.println(sb);
	}
}

3. toCharArray( )를 사용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
	    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();  
		int T = Integer.parseInt(br.readLine());
		StringTokenizer st;
		
		for (int i = 0; i < T; i++) {
			st = new StringTokenizer(br.readLine()," ");
			int R = Integer.parseInt(st.nextToken());
			char[] S = st.nextToken().toCharArray();

//			(3)toCharArray()로 해서 사용 
			for(int j=0;j<S.length;j++) {
				for(int k=0;k<R;k++) {
					sb.append(S[j]); 
				}
			}
			sb.append("\n");
		}
		System.out.println(sb);
	}
}

  • getBytes( )는 생각해내지 못했다....... 근데 코드를 봐도 살짝 이해가 안갔다... 하지만 이렇게 푸는 방법도 있구나 하고 알고 간다... 한가지 안 사실은 byte형을 char로 바꾸면 charAt 형과 같다는 것..?
  • toCharArray로 사용해서 풀면 마찬가지로 CharArray[i]와 문자열.CharAt(i)가 같다..! 쉬운 얘기인 것 같은데 난 쉽게 생각하지 못하는 이유는..! 반성..! 
  • 이중 for문의 바깥은 문자열의 [i]을 문자열의 길이만큼 출력 (0,1,2,3...) / 이중 for문의 안은 문자열의 [i]를 여러번 반복해서 출력! 
  • 이제 StringBuilder는 어느정도 이해한것 같기도하다..

'algorithm > Baekjoon' 카테고리의 다른 글

[백준] 2908 상수  (0) 2022.10.11
[백준] 1157 단어 공부  (0) 2022.10.05
[백준] 10809 알파벳 찾기  (0) 2022.10.05
[백준] 4673 셀프 넘버  (0) 2022.09.29
[백준] 8958 OX퀴즈  (0) 2022.09.27