반응형
문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd
풀이
- 2진수& 3진수를 배열형태로 변환.
- 10진수값으로 비교 -> decimalConversion 함수 생성
- 2진수의 경우 0 -> 1 , 1 -> 0 으로 변환. (최초의 숫자는 틀렸다는 가정이므로 변환 횟수는 1번)
3진수의 경우 0 ->1 , 1 -> 2 , 2->0 으로 변환. ( 최초의 숫자는 틀렸다는 가정이므로 변환 횟수는 2번) - 변환되는 값들을 새로운 배열에 10진수로 저장.
- 모든 값들을 비교 일치하는 십진수가 있다면, 출력.
-> 3진수의 경우 2가지이므로 2중 for문 안에 for문 추가.
JAVA 코드
package SWEA_200501;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution_D4_4366_정식이의은행업무 {
public static int decimalConversion(int[] arr, int type) {
int ret = 0;
for (int i = 0; i < arr.length; i++) {
ret += Math.pow(type, arr.length - 1 - i) * arr[i];
}
return ret;
}
public static int search(int[] binaryArr, int[] ternaryArr) {
// 변환되는 2진수, 3진수 보관
int[] retBinary = new int[binaryArr.length]; // 0,1 두가지 -> 1번만 변환
int[][] retTernary = new int[ternaryArr.length][2]; // 0,1,2 세가지 -> 2번 변환
// 2진수 변환
for (int i = 0; i < binaryArr.length; i++) {
int[] nextBinary = binaryArr.clone(); // 복사
if (binaryArr[i] == 0) { // 0인 경우
nextBinary[i] = 1;
} else { // 1인 경우
nextBinary[i] = 0;
}
retBinary[i] = decimalConversion(nextBinary, 2); // 십진수 값
}
// 3진수 변환
for (int i = 0; i < ternaryArr.length; i++) {
int[] nextTernary = ternaryArr.clone(); // 복사
for (int cnt = 0; cnt < 2; cnt++) { // 2번 반복 (0 -> 1, 1 -> 2, 2 -> 0)
if (nextTernary[i] == 0) { // 0인 경우
nextTernary[i] = 1;
} else if (nextTernary[i] == 1) {// 1인 경우
nextTernary[i] = 2;
} else { // 2인 경우
nextTernary[i] = 0;
}
retTernary[i][cnt] = decimalConversion(nextTernary, 3);
}
}
// 같은 경우 탐색
for (int i = 0; i < binaryArr.length; i++) {
for (int j = 0; j < ternaryArr.length; j++)
for (int cnt = 0; cnt < 2; cnt++)
if (retBinary[i] == retTernary[j][cnt]) // 같은 경우
return retBinary[i];
}
return 0;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int tc = Integer.parseInt(br.readLine());
for (int test = 1; test <= tc; test++) {
String binary = br.readLine();
String ternary = br.readLine();
// 2진수 3진수로 배열에 담는 과정
int[] binaryArr = new int[binary.length()];
int[] ternaryArr = new int[ternary.length()];
for (int i = 0; i < binary.length(); i++) {
binaryArr[i] = binary.charAt(i) - '0';
}
for (int i = 0; i < ternary.length(); i++) {
ternaryArr[i] = ternary.charAt(i) - '0';
}
sb.append("#" + test + " " + search(binaryArr, ternaryArr) + "\n");
} // end of testcase
System.out.println(sb);
}// end of main
}
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
[BAEKJOON_4485 - JAVA] 녹색 옷 입은 애가 젤다지? (2) | 2020.05.03 |
---|---|
[BAEKJOON_15686 - JAVA] 치킨배달 (0) | 2020.05.02 |
[SWEA_4050 - JAVA] 재관이의 대량할인 (0) | 2020.04.30 |
[SWEA_6109 - JAVA] 추억의 2048게임 (0) | 2020.04.30 |
[BAEKJOON_16234 - JAVA] 인구 이동 (0) | 2020.04.24 |