풀이
우선, 문제에 주어진대로 2진수로 만들 수 있는 모든 숫자를 list에 저장한 후에 3진수로 만들 수 있는 모든 숫자를 만들면서 list에 들어있는지를 검사하게 하여 해결했습니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static String binary, ternary;
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 tc = 1; tc <= T; ++tc) {
binary = br.readLine();
ternary = br.readLine();
// 이진수의 모든 경우를 십진수로 바꾸어 저장
List<Integer> list = new ArrayList<Integer>();
list.add(Integer.parseInt(binary, 2));
for (int i = 0; i < binary.length(); ++i) {
char[] changeBinary = binary.toCharArray();
if (changeBinary[i] == '1') {
changeBinary[i] = '0';
}
else {
changeBinary[i] = '1';
}
list.add(Integer.parseInt(String.valueOf(changeBinary), 2));
}
int answer = 0;
// 삼진수를 처리하면서 같은 십진수의 수가 list에 있는지 검사
out: for (int i = 0; i < ternary.length(); ++i) {
char[] changeTernary = ternary.toCharArray();
for (int j = 1; j <= 2; ++j) {
char originalBit = changeTernary[i];
int changeBit = ((changeTernary[i] - '0') + j) % 3;
changeTernary[i] = (char) (changeBit + '0');
answer = Integer.parseInt(String.valueOf(changeTernary), 3);
if (list.contains(answer)) {
break out;
}
changeTernary[i] = originalBit;
}
}
sb.append("#").append(tc).append(" ").append(answer).append("\n");
}
System.out.println(sb);
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[Java] SWEA 6109번 추억의 2048게임 (0) | 2021.04.27 |
---|---|
[Java] SWEA 7465번 창용 마을 무리의 개수 (0) | 2021.04.26 |
[Java] SWEA 4301번 콩 많이 심기 (0) | 2021.04.19 |
[Java] SWEA 6855번 신도시 전기 연결하기 (0) | 2021.04.13 |
[Java] SWEA 3143번 가장 빠른 문자열 타이핑 (0) | 2021.04.12 |