

나의 풀이
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] = ""; // 1
String[] arr1_s = new String[n]; // 2
String[] arr2_s = new String[n];
for (int i = 0; i < n; i++) {
String s1 = Integer.toBinaryString(arr1[i]); // 3
if (s1.length() < n) {
while (s1.length() < n) {
s1 = "0" + s1;
}
}
s1 = s1.replace("1", "#"); // 4
s1 = s1.replace("0", " ");
arr1_s[i] = s1;
String s2 = Integer.toBinaryString(arr2[i]);
if (s2.length() < n) {
while (s2.length() < n) {
s2 = "0" + s2;
}
}
s2 = s2.replace("1", "#");
s2 = s2.replace("0", " ");
arr2_s[i] = s2;
for (int j = 0; j < n; j++) { // 5
if (arr1_s[i].charAt(j) == '#' || arr2_s[i].charAt(j) == '#') answer[i] += "#";
else answer[i] += " ";
}
}
return answer;
}
}
과정
- answer의 길이를 n으로 초기화하고, answer의 모든 요소를 초기화한다(초기화 전엔 null이 기본적으로 들어감)
- int 배열 arr1과 arr2를 2진수로 변환해서 저장할 배열arr1_s와 arr2_s를 선언
- arr의 i번째 요소를 2진수로 변환하고, 변환한 길이가 n보다 작다면 n과 같아질 때까지 앞에 0을 붙여준다
- 1이면 #으로 0이면 공백으로 변환한 후 선언했던 arr1_s의 i번째에 넣어준다 (arr2도 반복)
- arr1_s와 arr2_s의 j번째 문자가 둘 중 하나라도 #이라면 #을 answer[i]에 더해주고, 아니면 공백을 더해준다
다른 사람 풀이
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] result = new String[n];
for (int i = 0; i < n; i++) {
result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
}
for (int i = 0; i < n; i++) {
result[i] = String.format("%" + n + "s", result[i]);
result[i] = result[i].replaceAll("1", "#");
result[i] = result[i].replaceAll("0", " ");
}
return result;
}
}