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

입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
| 매개변수 | 값 |
|---|---|
| n | 5 |
| arr1 | [9, 20, 28, 18, 11] |
| arr2 | [30, 1, 21, 17, 28] |
| 출력 | ["#####","# # #", "### #", "# ##", "#####"] |
| 매개변수 | 값 |
|---|---|
| n | 6 |
| arr1 | [46, 33, 33 ,22, 31, 50] |
| arr2 | [27 ,56, 19, 14, 14, 10] |
| 출력 | ["######", "### #", "## ##", " #### ", " #####", "### # "] |
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String[] str1 = new String[n];
String[] str2 = new String[n];
for(int i=0; i<n; i++){
String st = "";
String temp1 = Integer.toBinaryString(arr1[i]);
while(temp1.length() < n) temp1 = "0" + temp1;
str1[i] = temp1;
String temp2 = Integer.toBinaryString(arr2[i]);
while(temp2.length() < n) temp2 = "0" + temp2;
str2[i] = temp2;
for(int j=0; j<n; j++){
int item1 = (int)(str1[i].charAt(j) - '0');
int item2 = (int)(str2[i].charAt(j) - '0');
st += (item1+item2 != 0) ? "#" : " ";
}
answer[i] = st;
}
return answer;
}
}
다른 사람의 풀이를 보다가 놀라운 코드를 발견했다.
for (int i = 0; i < n; i++) {
result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
}
2진수로 변환하는 메소드 안에 arr1[i]|arr2[i]를 인자로 줘서 변환 뿐만 아니라 비트 연산까지 한번에 처리할 수 있었다. 신기하당
그리고 빈자리 0으로 채우기 메소드도 간단했다. 이 메소드의 존재는 알았지만 자릿수를 n으로 못 두고 반드시 지정해야하는 줄 알았는데 출력처럼 n을 넣어줄 수 있었다.
result[i] = String.format("%" + n + "s", result[i]);