코딩테스트

[인프런/DFS/8. 수열 추측하기]

개발하는지호 2024. 3. 15. 20:50

<<풀이>>

 

후.. 일단 너무 피곤한 상태로 풀어서 그런지 머리가 안 돌아갔다. 물론 어려운 문제이기도 하다 ㅠㅠ 내 혼자 힘으로 풀어 보고 싶지만

너무 시간 잡아 먹는 것도 좋지 않기 때문에 어느 정도 선에서 풀이를 보고자 한다.,

밑의 코드는 내가 한 곳 까지 적어놨다. 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

class Main {
    private int combi(int n, int i) {
        int[][] ch = new int[11][11];
        if (ch[n][i] > 0) return ch[n][i];
        if(n == i || i == 0) return 1;
        else return ch[n][i] = combi(n - 1, i - 1) + combi(n - 1, i);
    }

    private ArrayList<Integer> solution(int n, int m) {
        int[] combiresult = new int[n];
        for (int i = 0; i < n; i++) {
            combiresult[i] = combi(n - 1, i);
        }

       return answer(combiresult, n, m);

    }

    private ArrayList<Integer> answer(int[] combiresult, int n, int m) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.get()
        }

    }

    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        int n = Integer.parseInt(arr[0]);
        int m = Integer.parseInt(arr[1]);

        for (int x : T.solution(n, m) ) {
            System.out.print(x + " ");
        }
    }
}

 

 

-강사님 풀이-

 

역시 깔끔 그 자체 ,,, 이때 까지 가르쳐 주신 것을 야무지게 조합해서 푸셨다.!!! 이런 감각 나도 가지고 싶다 ㅠㅠ

 

결국 내가 푼 방식의 흐름을 가지고 있지만, 코드 자체는 훠얼씬 깔끔하고 트렌디 하다!!

 

지금은 이렇게 풀다가 막히고 하지만, 미래의 나는 강사님처럼 잘했으면한다 ㅎㅎ .. 화이팅!

import java.util.*;
class Main{
    static int[] b, p, ch;
    static int n, f;
    boolean flag=false;
    int[][] dy=new int[35][35];
    public int combi(int n, int r){
        if(dy[n][r]>0) return dy[n][r];
        if(n==r || r==0) return 1;
        else return dy[n][r]=combi(n-1, r-1)+combi(n-1, r);
    }

    public void DFS(int L, int sum){
        if(flag) return;
        if(L==n){
            if(sum==f){
                for(int x : p) System.out.print(x+" ");
                flag=true;
            }
        }
        else{
            for(int i=1; i<=n; i++){
                if(ch[i]==0){
                    ch[i]=1;
                    p[L]=i;
                    DFS(L+1, sum+(p[L]*b[L]));
                    ch[i]=0;
                }
            }
        }
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        n=kb.nextInt();
        f=kb.nextInt();
        b=new int[n];
        p=new int[n];
        ch=new int[n+1];
        for(int i=0; i<n; i++){
            b[i]=T.combi(n-1, i);
        }
        T.DFS(0, 0);
    }
}