728x90
반응형
2024.09.24기준 - 실버2
728x90
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 집합 숫자 표기법을 숫자로 변환하고, 변환된 수의 합을 다시 집합 숫자 표기법으로 출력하는 문제입니다.
접근 방식
- 입력 받은 집합 숫자 표기법은 뒤에 있는 }의 개수보다 -1보다 작은 수입니다.
- 두 수의 총 합은 15이기 때문에 15개의 지합 숫자 표기법을 미리 만들어 주었습니다.
- 두 수의 합에 해당하는 집합 숫자 표기법을 출력해줍니다.
1. 먼저 집합 숫자 표기법을 세팅해주었습니다.
// 숫자를 집합 숫자 표기법으로 변환해주는 메소드.
private static String[] encryption() {
StringBuilder sb = new StringBuilder();
String[] str = new String[16];
str[0] = "{}";
str[1] = "{{}}";
// 참조하는 인덱스는 그 전에 인덱스를 모두 포함하고 있는 집합이다.
for (int i = 2; i < 16; i++) {
sb = new StringBuilder();
sb.append("{");
for (int j = 0; j < i; j++) {
sb.append(str[j]);
if (j < i - 1) {
sb.append(",");
}
}
sb.append("}");
str[i] = sb.toString();
}
return str;
}
- 조건에서 두 수의 합은 15이기 때문에 최대로 잡아도 16개의 집합 숫자 표기법이 나오므로 16개의 집합 숫자 표기법을 미리 만들어 주었습니다.
2. 입력받은 집합 숫자 표기법을 숫자로 변환해주는 메소드를 생성합니다.
// 집합 숫자 표기법을 숫자로 변환해주는 메소드.
private static int decoding(String s) {
int num = 0;
// 마지막 }의 개수에 -1을 하면 해당하는 수가 나온다.
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == '}') {
num++;
} else {
break;
}
}
return num - 1;
}
- 입력 받은 집합 숫자 표기법에서 뒤에 있는 }의 개수에 -1 만큼의 숫자로 변환됩니다.
3. 숫자로 변환된 수를 합하고 두 수의 합에 맞는 집합 숫자 표기법을 출력합니다.
// 미리 숫자를 집합 숫자 표기법으로 변환
String[] setting = encryption();
String s1, s2;
int sum;
while (t-- > 0) {
s1 = br.readLine();
s2 = br.readLine();
sum = decoding(s1) + decoding(s2); // 두 수의 합
sb.append(setting[sum]).append("\n"); // 출력
}
코드
package Main;
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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
// 미리 숫자를 집합 숫자 표기법으로 변환
String[] setting = encryption();
String s1, s2;
int sum;
while (t-- > 0) {
s1 = br.readLine();
s2 = br.readLine();
sum = decoding(s1) + decoding(s2); // 두 수의 합
sb.append(setting[sum]).append("\n"); // 출력
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
// 집합 숫자 표기법을 숫자로 변환해주는 메소드.
private static int decoding(String s) {
int num = 0;
// 마지막 }의 개수에 -1을 하면 해당하는 수가 나온다.
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == '}') {
num++;
} else {
break;
}
}
return num - 1;
}
// 숫자를 집합 숫자 표기법으로 변환해주는 메소드.
private static String[] encryption() {
StringBuilder sb = new StringBuilder();
String[] str = new String[16];
str[0] = "{}";
str[1] = "{{}}";
// 참조하는 인덱스는 그 전에 인덱스를 모두 포함하고 있는 집합이다.
for (int i = 2; i < 16; i++) {
sb = new StringBuilder();
sb.append("{");
for (int j = 0; j < i; j++) {
sb.append(str[j]);
if (j < i - 1) {
sb.append(",");
}
}
sb.append("}");
str[i] = sb.toString();
}
return str;
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 24039번 2021은 무엇이 특별할까? (0) | 2024.09.28 |
---|---|
BEAKJOON / 백준 - JAVA 15727번 조별과제를 하려는데 조장이 사라졌다 (0) | 2024.09.25 |
BEAKJOON / 백준 - JAVA 25166번 배고픈 아리의 샌드위치 구매하기 (0) | 2024.09.23 |
BEAKJOON / 백준 - JAVA 18795번 이동하기 3 (0) | 2024.09.22 |
BEAKJOON / 백준 - JAVA 13423번 Three Dots (1) | 2024.09.21 |