๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[๋ฐฑ์ค€/1003/์‹ค๋ฒ„3] ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 3. 1.

https://www.acmicpc.net/problem/1003

 

1003๋ฒˆ: ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค 0์ด ์ถœ๋ ฅ๋˜๋Š” ํšŸ์ˆ˜์™€ 1์ด ์ถœ๋ ฅ๋˜๋Š” ํšŸ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

<<ํ’€์ด>>

 

์šฐ์„  ์ฒซ ๋ฒˆ์งธ ํ’€์ด๋‹ค. DFS๋ฅผ ํ™œ์šฉํ–ˆ๊ณ  ๋‘ ๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ๊ตฌํ–ˆ๋‹ค.

 

์ •๋‹ต์„ ๋งž์ท„๋‹ค !!!

 

๊ทผ๋ฐ, ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค ใ… ใ… 

 

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

class Main {
    static ArrayList<int[]> list = new ArrayList<>();
    static int m, z;

    static public void DFS(int x) {

        if(x == 0) m++;
        if(x == 1) z++;
        if(x > 1) {
            DFS(x - 1);
            DFS(x - 2);
        }
    }
    private ArrayList<int[]> solution(int n, int[] arr) {

        for (int i = 0; i < n; i++) {
            DFS(arr[i]);
            list.add(new int[] {m, z});
            m = 0;
            z = 0;
        }
        return list;
    }

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

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        for (int[] x : T.solution(n, arr)) {
            for (int answer : x) {
                System.out.print(answer + " ");
            }
            System.out.println();
        }
    }
}


 

๋ฉ”๋ชจ์ œ์ด์…˜ ์‚ฌ์šฉ

๋ณดํ†ต ์—ฌ๊ธฐ์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ์ด์œ ๋Š” ์ด๋ฏธ ๊ตฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋˜ ๋‹ค์‹œ ๊ตฌํ•˜๋ฉด์„œ ์‹œ๊ฐ„์„ ์Ÿ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ์žฌ๊ท€ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ์‹œ๊ฐ„๋ถ€๋ถ„์—์„œ ์ตœ์•…์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ๋ฐ ์ด๋ฅผ ์ตœ์†Œํ™” ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฉ”๋ชจ์ œ์ด์…˜์„ ํ™œ์šฉํ•œ๋‹ค.

 

๋ฉ”๋ชจ์ œ์ด์…˜์„ ํ™œ์šฉํ• ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐ์—ด์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ true false๋กœ๋„ ์‚ฌ์šฉํ•œ๋‹ค. 

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

class Main {
    static ArrayList<int[]> list = new ArrayList<>();
    static int m, z;
    static int[][] ch;

    static public void DFS(int x) {

        if (ch[x][0] != 0 &&  ch[x][1] != 0) {
            m += ch[x][0];
            z += ch[x][1];
        } else {

            if (x == 0) m++;
            if (x == 1) z++;
            if (x > 1) {
                DFS(x - 1);
                DFS(x - 2);
            }
        }
    }

    private ArrayList<int[]> solution(int n, int[] arr) {

        for (int i = 0; i < n; i++) {
            DFS(arr[i]);
            list.add(new int[] {m, z});
            ch[arr[i]] = new int[] {m, z};
            m = 0;
            z = 0;
        }
        return list;
    }

    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        ch = new int[41][2];
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        for (int[] x : T.solution(n, arr)) {
            for (int answer : x) {
                System.out.print(answer + " ");
            }
            System.out.println();
        }
    }
}


 

์ด๋ฒˆ์— ๋ฉ”๋ชจ์ œ์ด์…˜์„ ํ™œ์šฉํ•ด์„œ ๋งŒ์•ฝ ์ด๋ฏธ ๊ตฌํ•œ ๊ฐ’์ด๋ผ๋ฉด ๊ทธ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€์„œ ์ง„ํ–‰ํ•˜๋Š” ์‹์œผ๋กœ ํ–ˆ๋Š”๋ฐ ,, ๋˜๋‹ค์‹œ ์‹œ๊ฐ„์ดˆ๊ณผ์ด๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

 

์ผ๋‹จ์€ (0,0) ์ธ ๊ฒฝ์šฐ๋„ ์ค‘๋ณต ๊ณ„์‚ฐ์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ch ์ดˆ๊ธฐ๊ฐ’์„ -1๋กœ ๋ฐ”๊ฟˆ์œผ๋กœ์จ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

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

class Main {
    static ArrayList<int[]> list = new ArrayList<>();
    static int m, z;
    static int[][] ch;

    static public void DFS(int x) {

        if (ch[x][0] != -1 &&  ch[x][1] != -1) {
            m += ch[x][0];
            z += ch[x][1];
        } else {

            if (x == 0) m++;
            if (x == 1) z++;
            if (x > 1) {
                DFS(x - 1);
                DFS(x - 2);
            }
        }
    }

    private ArrayList<int[]> solution(int n, int[] arr) {

        for (int i = 0; i < n; i++) {
            DFS(arr[i]);
            list.add(new int[] {m, z});
            ch[arr[i]] = new int[] {m, z};
            m = 0;
            z = 0;
        }
        return list;
    }

    public static void main(String[] args) throws Exception{
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        ch = new int[41][2];
        for (int i = 0; i < 41; i++) {
            ch[i][0] = -1;
            ch[i][1] = -1;
          }
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        for (int[] x : T.solution(n, arr)) {
            for (int answer : x) {
                System.out.print(answer + " ");
            }
            System.out.println();
        }
    }
}


 

๊ทธ๋ž˜๋„ ์‹œ๊ฐ„์ดˆ๊ณผ ใ…‹ใ…‹ ๋ฏธ์น˜๊ฒŸ๋‹ค ใ…‹

 

DP ํ™œ์šฉ

 

๊ฒฐ๊ตญ,,, DP๋ฅผ ํ™œ์šฉํ•ด์„œ ํ’€์–ด๋ผ๋Š” ๋ฌธ์ œ์˜€๋‹ค ใ…‹ใ…‹ ใ…Žใ…Ž

๊ทผ๋ฐ, ์•„์ง DP์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ๋งŽ์ด ์—†์–ด์„œ ๊ณต๋ถ€ํ•˜๊ณ  ๋‹ค์Œ์—๋Š” ์ด๊ฑธ ์ œ๋Œ€๋กœ ํ’€์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

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

class Main {
    static int[][] dp = new int[41][2]; // ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์œ„ํ•œ ๋ฐฐ์—ด

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine()); // ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜

        // dp ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        dp[0][0] = 1; dp[0][1] = 0; // fibonacci(0)์€ 0์„ 1๋ฒˆ, 1์„ 0๋ฒˆ ๋ฐ˜ํ™˜
        dp[1][0] = 0; dp[1][1] = 1; // fibonacci(1)์€ 0์„ 0๋ฒˆ, 1์„ 1๋ฒˆ ๋ฐ˜ํ™˜

        // fibonacci(2)๋ถ€ํ„ฐ fibonacci(40)๊นŒ์ง€ ๊ณ„์‚ฐ
        for (int i = 2; i <= 40; i++) {
            dp[i][0] = dp[i-1][0] + dp[i-2][0]; // 0 ๋ฐ˜ํ™˜ ํšŸ์ˆ˜
            dp[i][1] = dp[i-1][1] + dp[i-2][1]; // 1 ๋ฐ˜ํ™˜ ํšŸ์ˆ˜
        }

        StringBuilder sb = new StringBuilder();
        while (T-- > 0) {
            int N = Integer.parseInt(br.readLine());
            sb.append(dp[N][0]).append(' ').append(dp[N][1]).append('\n');
        }
        System.out.println(sb.toString());
    }
}

 

 

<<์ถ”๊ฐ€ ๊ณต๋ถ€>>

ArrayList 

 ๋‚ด๊ฐ€ ์ด๊ฑธ ์ ์šฉํ•˜๋‹ค๊ฐ€ ์ข€ ์• ๋ฅผ ๋จน์—ˆ๋‹ค. ๊ทธ ์ •ํ™•ํ•œ ์›๋ฆฌ? ๊ตฌ์กฐ? ๋ฅผ ๋ชฐ๋ž๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ArrayList๋ฅผ ์ดˆ๊ธฐํ™” ์‹œํ‚ค๋ฉด null ์ด๊ณ  0์ด๊ณ  ์—†๋Š” ์ƒํƒœ์ด๋‹ค. ๊ทผ๋ฐ ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋‚˜๋Š” ์ด๋ฅผ ๋ชจ๋ฅด๊ณ  ๋ฌด์ž‘์ • ๋„ฃ์œผ๋ ค๊ณ  ํ–ˆ๋‹ค. 

๋‹ค์Œ ๋ถ€ํ„ฐ ์ด๋ฅผ ์ ์šฉํ•  ๋•Œ์—๋Š” ๋จผ์ € ๋„ฃ๊ณ  ๋‚œ ๋’ค ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์ง€๋ง์ž!!!

 

ArrayList ๋ฉ”์„œ๋“œ

set : ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋Œ€์ฒดํ•  ๋•Œ ์“ด๋‹ค.

 

add : ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ํŠน์ • ์œ„์น˜์˜ ์ธ๋ฑ์Šค์— ๊ฐ’์„ ๋„ฃ๊ณ  ์›๋ž˜ ์œ„์น˜์— ์žˆ๋˜ ์ธ๋ฑ์Šค์˜ ๊ฐ’์€ ๋’ค๋กœ ๋ฏธ๋ฃฌ๋‹ค. 

 

int[][] arr = new int[5][5];

์ด๋Ÿฌํ•œ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๋ฉด ์ดˆ๊ธฐํ™”๋Š” ๊ฐ ์œ„์น˜๋งˆ๋‹ค ์ดˆ๊ธฐํ™” 0์ด ๋œ๋‹ค. 

 

int[][] arr = new int[5][];

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด arr[1], arr[2] .... ์˜ ๊ฐ’์€ null๋กœ ๋œ๋‹ค. ๋‚˜๋Š” ์ด๋ถ€๋ถ„์ด ํ—ท๊ฐˆ๋ ธ์–ด์„œ ์ž˜๋ชป ์ ์šฉ์„ ํ–ˆ์—ˆ๋‹ค.

 

 

 

๋Œ“๊ธ€