Algorithm
프로그래머스
Java
비밀 지도

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);
    }
}