TIL

[코테연습] 869. Reordered Power of 2

크라00 2024. 6. 21. 18:01

- 정렬문제

 

https://leetcode.com/problems/reordered-power-of-2/description/

 

- 해결방법

 


1. n 으로 만들 수 있는 숫자를 구한다.
 1-1. 2 의 배수인지 확인한다. ( x % 2 == 0 )
2. 거듭제곱인지 확인한다.
 2-1. 나머지가 1 경우, true
 2-2. 2 로 나누면서 확인한다.

 

class Solution {
    List<Integer> list;
    public boolean reorderedPowerOf2(int n) {
        list = new ArrayList<>();
        String str = String.valueOf(n);
        String[] arr = str.split("");

        int size = arr.length;
        dfs(arr, size, 0, new boolean[size], 0, new String[size]);
        
        boolean found = false;
        for (int num : list) {
            while(!found) {
                if (num == 1) {
                    found = true;
                    break;
                }
                num/=2;
                if (num % 2 != 0) {
                    if (num == 1) {
                        found = true;
                        break;
                    }
                    break;
                }
            }
        }
        return found;
    } 
    void dfs(String[] arr, int n, int depth, boolean[] visited, int start, String[] output) {

        if ( depth == n) {
            if (output[0].equals("0")) return;
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < output.length; i++) {
                sb.append(output[i]);
            }
            int number = Integer.parseInt(sb.toString());
            if (number != 1 && number % 2 != 0) return;
            list.add(number);
            return;
        }
        for (int i = 0; i < n; i++) {
            if (!visited[i]) {
                visited[i] = true;
                output[depth] = arr[i];
                dfs(arr, n, depth+1, visited, start, output);
                visited[i] = false;
            }
        }

    }

}