[Algorithm/Java] 백준 2675번 - 문자열 반복
https://www.acmicpc.net/problem/2675
📌 문제
문제 유형
- 구현
- 문자열
문제 설명
- 입력으로 반복 횟수와 문자열이 주어짐
- 문자열의 각 문자를 반복 횟수만큼 반복해서 출력
입출력 예시
입력
2
3 ABC
5 /HTP
출력
AAABBBCCC
/////HHHHHTTTTTPPPPP
🔍 문제 풀이
- 각 테스트 케이스마다 문자 하나를 R번 반복해서 출력
- 반복은
charAt()
을 이용해 구현
charAt() vs toCharArray()
거의 모든 경우에 charAt()
과 toCharArray()
는 상호 대체 가능하다.
하지만 toCharArray()
는 문자열을 배열로 복사하므로, 문자열이 매우 길 경우 성능과 메모리 측면에서 불리할 수 있다.
String s = "abc";
// 1. charAt()
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
System.out.println(c);
}
// 2. toCharArray()
for (char c : s.toCharArray()) {
System.out.println(c);
}
💻 전체 코드
charAt()
사용
package org.example;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
String input = st.nextToken();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < input.length(); j++) {
char ch = input.charAt(j);
for (int k = 0; k < n; k++) {
sb.append(ch);
}
}
System.out.println(sb.toString());
}
}
}
toCharArray()
사용
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for(int i=0; i<t; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
String str = st.nextToken();
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
for (int j = 0; j < num; j++) {
sb.append(c);
}
}
System.out.println(sb.toString());
}
}
}
💭 배운 점
- 전체 문자를 반복할 때
toCharArray()
대신charAt()
을 사용하면 별도 배열 없이 바로 인덱스로 접근할 수 있어 더 가볍게 구현할 수 있다는 점을 배웠다. - 속도가 중요한 경우,
charAt()
을, 빠르게 구현하고 싶을 때 for-each 사용이 가능한toCharArray()
을 사용하자.
🔁 복습 템플릿
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
String input = st.nextToken();
StringBuilder sb = new StringBuilder();
// 문자 반복 추가
System.out.println(sb.toString());
}
}
}
댓글남기기