휴지통/알고리즘 & 자료구조
비밀지도
by 신재권
2022. 10. 22.
package programmers;
public class 비밀지도 {
public static String[] solution(int n, int[] arr1, int[] arr2) {
return int2DArrayToStringArray(sumMap(go(arr1), go(arr2)));
}
private static String[] int2DArrayToStringArray(int[][] map) {
int len = map.length;
String[] stringsMap = new String[len];
for (int i = 0; i < len; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < len; j++) {
if (map[i][j] == 1) {
sb.append('#');
} else {
sb.append(' ');
}
}
stringsMap[i] = sb.toString();
}
return stringsMap;
}
private static int[][] sumMap(int[][] map1, int[][] map2) {
int len = map1.length;
int[][] map = new int[len][len];
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if (map1[i][j] == map2[i][j]) {
map[i][j] = map1[i][j];
} else {
map[i][j] = 1;
}
}
}
return map;
}
private static int[][] go(int[] arr) {
int len = arr.length;
int[][] map = new int[len][len];
for (int i = 0; i < len; i++) {
String tmp = toBinary(arr[i], len);
for (int j = 0; j < len; j++) {
if (tmp.charAt(j) == '1') {
map[i][j] = 1;
}
}
}
return map;
}
private static String toBinary(int num, int len) {
StringBuilder sb = new StringBuilder();
while (num > 0) {
sb.append(num % 2);
num /= 2;
}
if (sb.length() != len) {
do {
sb.append('0');
} while (sb.length() < len);
}
return sb.reverse().toString();
}
}