17681 비밀지도
맞추긴 했는데 애매한 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17681 (opens in a new tab)
내 풀이
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
ArrayList<String> ans = new ArrayList<String>();
for (int i = 0; i < arr1.length; i++) {
String result = toWall(n, arr1[i], arr2[i]);
ans.add(result);
}
// ArrayList<String> 👉 String[]
return ans.toArray(new String[0]);
}
// 여기서 int[]를 넘겨주고 부등호로 비교해줘서 Exception 발생
public String toWall(int n, int a, int b) {
ArrayDeque<Character> stack = new ArrayDeque<>();
char[] ans = new char[n];
Arrays.fill(ans, ' ');
// 1이면 반드시 들어와야 하는데 2로 설정해서 애먹음
// 어차피 나누다보면 몫이 0이 되는 순간이 오니까 그때까지만 돌면 됨
while (a >= 1 || b >= 1) {
char cur = ' ';
// 1이면 #으로 바꿔줘야 하는데 2로 설정해서 애먹음
if (a >= 1) {
if (a % 2 != 0) {
cur = '#';
}
a /= 2;
}
// 1이면 #으로 바꿔줘야 하는데 2로 설정해서 애먹음
if (b >= 1) {
if (b % 2 != 0) {
cur = '#';
}
b /= 2;
}
System.out.println(cur);
stack.addLast(cur);
}
for (int i = n - 1; i > -1; i--) {
if (!stack.isEmpty()) {
char cur = stack.pollFirst();
ans[i] = cur;
} else {
break;
}
}
return new String(ans);
}
}