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