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

๋ฐฑ์ค€ 12869๋ฒˆ : ๋ฎคํƒˆ๋ฆฌ์Šคํฌ | JAVA

by Yunny52 2023. 5. 31.

๊ณจ๋“œ 4

 

๐Ÿ“Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ

์ด ๋ฌธ์ œ๋Š” ๋นผ์ง€๋Š” ์ˆ˜๋„ 3๊ฐœ, ๋นผ๋Š” ์ˆซ์ž๋„ 3๊ฐœ๋ผ ๋™์ „ ๋ฌธ์ œ๋ณด๋‹ค ๋” ๋ณต์žกํ•˜๊ฒŒ ๋А๊ปด์กŒ๋˜ ๋ฌธ์ œ์˜€๋‹ค.

BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ ๊ณต๊ฒฉ ํŒจํ„ด์— ๋”ฐ๋ผ SCV ๊ฐ’๋“ค์„ ๊ฐ์†Œ์‹œ์ผœ๋ฉฐ ๊ณต๊ฒฉ ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ , 

DP๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์†Œ๋œ SCV ๊ฐ’๋“ค์„ ๊ธฐ์–ตํ•˜์—ฌ ์ค‘๋ณต ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ค„์˜€๋‹ค.

 


`๐Ÿ“Œ ํ’€์ด

1๏ธโƒฃ scv์˜ ์ˆ˜๊ฐ€ 3๊ฐœ๊ฐ€ ๋˜๋„๋ก ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ N์ด 1์ด๋‚˜ 2์ผ ๊ฒฝ์šฐ์—๋Š” scv์˜ ์ˆ˜๊ฐ€ ์ด 3๊ฐœ๊ฐ€ ๋˜๋„๋ก 0์„ ์ฑ„์›Œ์ค€๋‹ค.

 

2๏ธโƒฃ visited[][][]์˜ 3์ฐจ์› ๋ฐฐ์—ด์„ ํ†ตํ•ด scv์˜ ๋ณ€ํ™”๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

๋งŒ์•ฝ, visited[i][j][k] = 1์ผ ๊ฒฝ์šฐ, 0๋ฒˆ ์ด์ƒ์˜ ๊ณต๊ฒฉ์„ ํ†ตํ•ด (i, j, k)์— ๋„๋‹ฌํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ด๋ฏธ ๋„๋‹ฌํ•œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์‹œ ์—ฐ์‚ฐํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์—ฐ์‚ฐ์„ ๋ฉˆ์ถ˜๋‹ค.

 

3๏ธโƒฃ (i, j, k)์™€ (i, k, j)๋Š” ๊ฐ™์€ ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์—,

visited[][][]์˜ 3์ฐจ์› ๋ฐฐ์—ด ์ธ๋ฑ์Šค์˜ ๊ฐ’๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ •๋ ฌํ•˜์—ฌ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์ •๋ ฌ์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ํ•ด์ฃผ์—ˆ๋‹ค.

 

4๏ธโƒฃ ํ•œ ๋ฒˆ์˜ ๊ณต๊ฒฉ์— ๋Œ€ํ•ด์„œ  9, 3, 1 ๋งŒํผ 3๊ฐœ์˜ scv์— ๊ณต๊ฒฉ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด 6๊ฐœ์˜ ๊ณต๊ฒฉ ํŒจํ„ด์ด ์กด์žฌํ•œ๋‹ค.

๊ทธ์— ๋”ฐ๋ผ 6๊ฐœ์˜ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

5๏ธโƒฃ 3๊ฐœ์˜ scv์— ๋Œ€ํ•ด์„œ ๋ชจ๋‘ 0 ์ดํ•˜๊ฐ€ ๋˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

 


๐Ÿ“Œ ์ฝ”๋“œ

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

public class Main {

    static int N;
    static ArrayList<Integer> scv;
    static int[][][] visited;
    static int result = Integer.MAX_VALUE;

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine()); // SCV์˜ ์ˆ˜

        scv = new ArrayList<>();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for(int i = 0; i < N; i++)
            scv.add(Integer.parseInt(st.nextToken()));

        for(int i = N; i < 3; i++)
            scv.add(0);

        visited = new int[61][61][61];
        cal(scv.get(0), scv.get(1), scv.get(2), 0);

        System.out.println(result);

    }

    public static void cal(int a, int b, int c, int cnt) {

        a = Math.max(0, a);
        b = Math.max(0, b);
        c = Math.max(0, c);

        int max = Math.max(Math.max(a, b), c);
        int min = Math.min(Math.min(a, b), c);
        int mid = a + b + c - max - min;
        a = max;
        b = mid;
        c = min;

        if(a <= 0 && b <= 0 && c <= 0) {
            result = Math.min(cnt, result);
            return;
        }

        if(visited[a][b][c] == 1)
            return;
        else
            visited[a][b][c] = 1;

        if(result < cnt)
            return;

        cal(a-9, b-3, c-1, cnt+1);
        cal(a-9, b-1, c-3, cnt+1);
        cal(a-3, b-9, c-1, cnt+1);
        cal(a-3, b-1, c-9, cnt+1);
        cal(a-1, b-9, c-3, cnt+1);
        cal(a-1, b-3, c-9, cnt+1);

        return;

    }

}

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

 

12869๋ฒˆ: ๋ฎคํƒˆ๋ฆฌ์Šคํฌ

1, 3, 2 ์ˆœ์„œ๋Œ€๋กœ ๊ณต๊ฒฉ์„ ํ•˜๋ฉด, ๋‚จ์€ ์ฒด๋ ฅ์€ (12-9, 10-1, 4-3) = (3, 9, 1)์ด๋‹ค. 2, 1, 3 ์ˆœ์„œ๋Œ€๋กœ ๊ณต๊ฒฉ์„ ํ•˜๋ฉด, ๋‚จ์€ ์ฒด๋ ฅ์€ (0, 0, 0)์ด๋‹ค.

www.acmicpc.net

 

 

๋Œ“๊ธ€