문제요약:
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.

구현코드: 타임오버
import java.util.*;
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String a1="",a2="";
for(int i=0;i<n;i++){
a1=String.format("%0"+n+"d",Integer.parseInt(Integer.toBinaryString(arr1[i]).toString()));
a2=String.format("%0"+n+"d",Integer.parseInt(Integer.toBinaryString(arr2[i]).toString()));
for(int j=0;j<n;j++){
if(a1.charAt(j)=='1'||a2.charAt(j)=='1'){
if(j==0){
answer[i]="#";
}else{
answer[i]=answer[i]+"#";
}
}else{
if(j==0){
answer[i]=" ";
}else{
answer[i]=answer[i]+" ";
}
}
}
}
return answer;
}
}
String.format사용하여 구현해보았는데 타임오버가 2개뜬다.그리고charAt을 사용하여 비교했는데 할 필요가 없이 replace 로 활용하면 될거같다.
Integer.toBinaryString(i); //2진수
Integer.toOctalString(i); //8진수
Integer.toHexString(i); //16진수로 바꾸는 함수. 하지만 이렇게 풀면서 배울점이 많았다.
다른폴이코드
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for (int i = 0; i < n; i++) {
answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
answer[i] = answer[i].replace('0', ' ');
answer[i] = answer[i].replace('1', '#');
while (answer[i].length() < n) {
answer[i] = ' ' + answer[i];
}
}
return answer;
}
}
toBinaryString 에서 비트연산을 할수있는지 처음알았다. 정말 간단하게 풀수있는 문제였던거같다.
비드 연산은 AND : &,OR: | XOR : ^ NOT : ~ 으로 사용할 수 있다.