백준 2675번 자바
https://www.acmicpc.net/problem/2675
문제 내용은 아래 더보기를 누르면 나온다.
알고리즘
첫째 줄에는 테스트 케이스의 개수 T
둘째 줄부터는 테스트 케이스 한 줄씩 받음.
테스트 케이스에는 첫 문자는 반복 횟수 R(1 ≤ R ≤ 8)을 입력받음.
두번째 문자부터 문자열 S를 받게됨.문자열 S의 각 문자를 R번 반복하여 출력한다.
1. 테스트 케이스 개수 T 입력받기2. T만큼 반복하기
2-1. 한 줄 입력받아서 공백을 기준으로 나누기
2-2. 처음 값은 반복 횟수 R로 저장하기
2-3. 두번째 값은 문자열 S로 저장하기
2-4. 문자열 길이만큼 반복하기
1) R만큼 반복하기
(1) S.charAt(문자열 길이 반복 인덱스) 로 문자열 S의 각 문자를 출력하기
2-5. 반복이 끝나면 한줄 띄우기
풀이1
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class No_2675 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine());
int R = Integer.parseInt(st.nextToken());
String S = st.nextToken();
for (int j = 0; j < S.length(); j++) {
for (int k = 0; k < R; k++) {
bw.write(S.charAt(j));
}
}
bw.write("\n");
}
br.close();
bw.flush();
bw.close();
}
}
알고리즘대로 풀었기에 한줄씩 맞춰가며 보면 된다.
이번에는 StringBuilder 말고 BufferedWriter로 출력하였다.
쓰다보니 저번에 배운 getBytes 또는 toCharArray를 활용해서 쓸 수 있지 않을까?
한번 풀이2에서 풀어보자.
풀이2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class No_2675 {
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());
for (int i = 0; i < T; i++) {
String[] str = br.readLine().split(" ");
int R = Integer.parseInt(str[0]);
// str[1]이 풀이1에서 썼던 문자열 S이다.
for (byte value : str[1].getBytes()) {
for (int j = 0; j < R; j++) {
sb.append((char) value);
}
}
sb.append('\n');
}
System.out.println(sb);
}
}
문자열을 분리하는 것은 split 과 substring이 있는데 split은 어떤 문자를 기준으로 구분하여 배열로 반환해주고
substring은 매개변수로 받은 인덱스로 문자열을 잘라서 그 후부터 반환해준다. (e.g. "Hello".substring(2) == "llo" )
그래서 기존에 StringTokenizer로 공백을 기준으로 나누었다면 split 메서드로 공백을 기준으로 나누었다.
그 후 문자열 S를 charAt() 으로 각 문자를 썼는데 이번에는 getBytes로 Byte배열로 반환받아서 꺼내쓰자.
배열로 받으니 바로 for-each문을 사용하여서 배열의 값들을 꺼내 활용했다.
여기서 중요한게 byte로 인코딩한 값을 꺼냈기에 그대로 출력하면 인코딩값이 나온다.
그래서 char로 강제형변환을 하여 우리가 아는 문자로 나오게 한다.
'코딩테스트 > Java - 백준' 카테고리의 다른 글
[백준] 1152번 - Java(자바) (0) | 2022.02.21 |
---|---|
[백준] 1157번 - Java(자바) (0) | 2022.02.17 |
[백준] 10809번 - Java(자바) (0) | 2022.02.12 |
[백준] 11720번 - Java(자바) (0) | 2022.02.09 |
[백준] 11654번 - Java(자바) (0) | 2022.02.07 |