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

입력 형식
입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
- 1 ≦ n ≦ 16
- arr1, arr2는 길이 n인 정수 배열로 주어진다.
- 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
출력 형식
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
두 정수 배열값을 2진수로 바꾸고 비트OR연산한 뒤 출력형식에 맞춰 출력한다.
이 문제의 포인트는 비트OR연산이다!
비트논리연산자 OR ( | ) :
비트가 어느 하나라도 1 이면 1이다. -> 둘 다 0 일 때만 0. 그 외엔 1.
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for (int i = 0; i < n; i++) {
// arr1과 arr2를 OR 연산하여 이진수로 변환한 값을 2진수 문자열로 저장
String binaryString = Integer.toBinaryString(arr1[i] | arr2[i]);
// 문자열의 길이가 n보다 작은 경우, 왼쪽에 0을 채워준다.
if (binaryString.length() < n) {
binaryString = "0".repeat(n - binaryString.length()) + binaryString;
}
// 문자열의 각 자리수를 검사하여 '#' 또는 ' '을 저장
String row = "";
for (int j = 0; j < n; j++) {
if (binaryString.charAt(j) == '1') {
row += "#";
} else {
row += " ";
}
}
answer[i] = row;
}
return answer;
}
}
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String temp;
for(int i = 0 ; i < n ; i++){
temp = String.format("%16s", Integer.toBinaryString(arr1[i] | arr2[i])); // n의 최대값인 16으로 일단 만들고
temp = temp.substring(temp.length() - n); //n크기만큼 자른다.
temp = temp.replaceAll("1", "#");
temp = temp.replaceAll("0", " ");
answer[i] = temp;
}
return answer;
}
}