J

[JAVA] Programmers ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ์ด์ง„ํŠธ๋ฆฌ ๋ณธ๋ฌธ

๐Ÿ”‘ Problem Solving/๐Ÿซ Programmers

[JAVA] Programmers ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ์ด์ง„ํŠธ๋ฆฌ

snowball๐Ÿฐ 2023. 5. 9. 10:22

ํ’€์ด ๋ฐฉ๋ฒ•

  1. Queue๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์ƒ์œ„ parent์˜ node ๊ฐ’์„ ์ €์žฅํ•ด์ค€๋‹ค.
  2. convert ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด num์„ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
    1. ์ด๋•Œ ์˜ˆ์‹œ์˜ 63์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์›๋ž˜์˜ ์ด์ง„์ˆ˜๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
    2. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์ƒ๊ฐํ–ˆ์„ ๋•Œ ์ด์ง„์ˆ˜์˜ ๊ธธ์ด์— ๊ฐ’์„ ๋งž์ถ”๊ธฐ์œ„ํ•ด ์•ž์— 0์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ์„ ์ƒ๊ฐํ•˜์ž.
    3. ๊ฐ€๋Šฅํ•œ ์ด์ง„์ˆ˜์˜ ๊ธธ์ด๋Š” nums ๋ฐฐ์—ด์— ์ €์žฅํ•ด๋‘์—ˆ๋‹ค.
    4. ๊ฐ€๋Šฅํ•œ ์ด์ง„์ˆ˜์˜ ๊ธธ์ด๊ฐ€ ๋˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋งŒํผ ์•ž์— 0์„ ์ถ”๊ฐ€ํ•ด์ฃผ์ž
  3. check ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ด์ง„ํŠธ๋ฆฌ๊ฐ€ ๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    1. ์ง์ˆ˜์˜ ๊ฒฝ์šฐ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘” roots๋ฐฐ์—ด์„ ํ™•์ธํ•œ๋‹ค.
    2. ํ™€์ˆ˜์˜ ๊ฒฝ์šฐ 4๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ 1์ธ ์นœ๊ตฌ๋“ค๊ณผ 2์ธ ์นœ๊ตฌ๋“ค์— ๋”ฐ๋ผ parent๊ฐ€ ๋‹ค๋ฅด๋‹ค.
    3. ๊ฐ€๋Šฅํ•œ ์ด์ง„ํŠธ๋ฆฌ๊ฐ€ ๋˜๋ ค๋ฉด ์ž์‹์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋ถ€๋ชจ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.
import java.util.*;

class Solution {
    static int[] nums = {1, 3, 7, 15, 31, 63};
    static int[] roots;
    public int[] solution(long[] numbers) {
        int N = numbers.length;
        int[] answer = new int[N];
        roots = new int[64];
        // Queue ์‚ฌ์šฉํ•˜๊ธฐ
        ArrayDeque<int[]> q = new ArrayDeque<>();
        q.offer(new int[]{32, 16});
        while(!q.isEmpty()){
            int[] now = q.poll();
            if(now[1] == 1) break;
            roots[now[0]-now[1]] = now[0];
            roots[now[0]+now[1]] = now[0];
            q.offer(new int[]{now[0]-now[1], now[1]/2});
            q.offer(new int[]{now[0]+now[1], now[1]/2});
        }
        for(int i=0; i<N; i++){
            String c = convert(numbers[i]);
            answer[i] = check(c);
        }
        return answer;
    }
    static int check(String s){
        int root = s.length()/2+1;
        for(int i=1; i<=s.length(); i++){
            if(i == root) continue;
            if(i % 4 == 1 && s.charAt(i-1) == '1'){
                if(s.charAt(i) == '0') return 0;
            }
            else if(i % 4 == 3 && s.charAt(i-1) == '1'){
                if(s.charAt(i-2) == '0') return 0;
                
            }
            else if(i % 2 == 0 && s.charAt(i-1) == '1'){
                if(s.charAt(roots[i]-1) == '0') return 0;
            }
        }
        return 1;
    }
    static String convert(long num){
        String r = "";
        while(true){
            r = (num % 2) +r;
            if(num == 0 || num == 1) break;
            num /= 2;
        }
        for(int i=0; i<6; i++){
            if(r.length() == nums[i]) return r;
            if(r.length() < nums[i]){
                int N = nums[i]-r.length();
                for(int j=0; j<N; j++)
                    r = "0"+r;
                return r;
            }
        }
        return r;
    }
}

'๐Ÿ”‘ Problem Solving > ๐Ÿซ Programmers' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JAVA] Programmers ๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ น์–ด  (0) 2023.05.08
[JAVA] Programmers ํ‘œ ๋ณ‘ํ•ฉ  (0) 2023.05.08
Comments