์ƒˆ์†Œ์‹

๋ฐ˜์‘ํ˜•
Algorithm

๋ฐฑ์ค€ 18430 ๋ฌด๊ธฐ๊ณตํ•™[JAVA]

  • -
๋ฐ˜์‘ํ˜•

๐Ÿ”—๋งํฌ

18430 ๋ฌด๊ธฐ ๊ณตํ•™ gold4

โš ๏ธ๋ฌธ์ œ


๊ณตํ•™์ž ๊ธธ๋™์ด๋Š” ์™ธ๋ถ€์˜ ์นจ๋žต์œผ๋กœ๋ถ€ํ„ฐ ๋งˆ์„์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ฉ”๋ž‘ ๋ฌด๊ธฐ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณตํ•™์ž๋‹ค. ๊ธธ๋™์ด๋Š” ๋ถ€๋ฉ”๋ž‘ ์ œ์ž‘์„ ์œ„ํ•œ ๊ณ ๊ธ‰ ๋‚˜๋ฌด ์žฌ๋ฃŒ๋ฅผ ๊ตฌํ–ˆ๋‹ค. ์ด ๋‚˜๋ฌด ์žฌ๋ฃŒ๋Š” NxMํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์ด๋ฉฐ ๋‚˜๋ฌด ์žฌ๋ฃŒ์˜ ๋ถ€์œ„๋งˆ๋‹ค ๊ทธ ๊ฐ•๋„๊ฐ€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜๋ฌด ์žฌ๋ฃŒ์˜ ํฌ๊ธฐ๊ฐ€ 2x3์ผ ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด 6์นธ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

๊ธธ๋™์ด๋Š” ์ด์ฒ˜๋Ÿผ ๋„“์€ ์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์˜ ๋‚˜๋ฌด ์žฌ๋ฃŒ๋ฅผ ์ž˜๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ถ€๋ฉ”๋ž‘์„ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ฉ”๋ž‘์€ ํ•ญ์ƒ 3์นธ์„ ์ฐจ์ง€ํ•˜๋Š” ‘ใ„ฑ’๋ชจ์–‘์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ€๋ฉ”๋ž‘์˜ ๊ฐ€๋Šฅํ•œ ๋ชจ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด 4๊ฐ€์ง€๋‹ค.

์ด๋•Œ ๋ถ€๋ฉ”๋ž‘์˜ ์ค‘์‹ฌ์ด ๋˜๋Š” ์นธ์€ ๊ฐ•๋„์˜ ์˜ํ–ฅ์„ 2๋ฐฐ๋กœ ๋ฐ›๋Š”๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ ๋…ธ๋ž€์ƒ‰์œผ๋กœ ์น ํ•œ ๋ถ€๋ถ„์ด ‘์ค‘์‹ฌ์ด ๋˜๋Š” ์นธ’์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ž์„  ์˜ˆ์‹œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 2๊ฐœ์˜ ๋ถ€๋ฉ”๋ž‘์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ถ€๋ฉ”๋ž‘๋“ค์˜ ๊ฐ•๋„์˜ ํ•ฉ์€ 46์œผ๋กœ ์ด๋ณด๋‹ค ๊ฐ•๋„์˜ ํ•ฉ์ด ๋†’์•„์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

๋˜ํ•œ ๋‚˜๋ฌด ์žฌ๋ฃŒ์˜ ํŠน์ • ์œ„์น˜๋Š” ์•„์˜ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ž์„  ์˜ˆ์‹œ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 1๊ฐœ์˜ ๋ถ€๋ฉ”๋ž‘๋งŒ์„ ๋งŒ๋“ค์–ด๋„ ๊ดœ์ฐฎ๋‹ค. ๋‹ค๋งŒ, ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ๋ถ€๋ฉ”๋ž‘๋“ค์˜ ๊ฐ•๋„์˜ ํ•ฉ์ด 18์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ด๋‹ค.

๋‚˜๋ฌด ์žฌ๋ฃŒ์˜ ํ˜•ํƒœ์™€ ๊ฐ ์นธ์˜ ๊ฐ•๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ธธ๋™์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ฉ”๋ž‘๋“ค์˜ ๊ฐ•๋„ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ๊ธธ๋™์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‚˜๋ฌด ์žฌ๋ฃŒ์˜ ์„ธ๋กœ, ๊ฐ€๋กœ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋‘ ์ž์—ฐ์ˆ˜ N, M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, M ≤ 5) ๋‹ค์Œ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ, ๋งค ์ค„๋งˆ๋‹ค ๋‚˜๋ฌด ์žฌ๋ฃŒ์˜ ๊ฐ ์œ„์น˜์˜ ๊ฐ•๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” M๊ฐœ์˜ ์ž์—ฐ์ˆ˜ K๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ 100)

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ธธ๋™์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ฉ”๋ž‘๋“ค์˜ ๊ฐ•๋„ ํ•ฉ์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋‹จ, ๋‚˜๋ฌด ์žฌ๋ฃŒ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์„œ ๋ถ€๋ฉ”๋ž‘์„ ํ•˜๋‚˜๋„ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”๋ถ„์„


DFS ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ถ€๋ฉ”๋ž‘์„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ๋‹ค์‹œ ๋’ค๋กœ ๊ฐ€์„œ ๋‹ค๋ฅธ ๋ชจ์–‘์˜ ๋ถ€๋ฉ”๋ž‘์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฒดํฌํ•˜์—ฌ ์ตœ๋Œ“๊ฐ’์„ ๋ฝ‘์•„๋‚ด๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์ฃผ์˜ ํ•  ์ ์€ ์ˆœํšŒํ•˜๋ฉด์„œ visited์ฒดํฌ์™€ ์ผ€์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ง„ํ–‰ํ•˜๋ฉด ์‹ค์ˆ˜๊ฐ€ ๋งŽ์ด ๋‚˜์˜ฌ ๊ฒƒ ๊ฐ™์•„ ์ผ€์ด์Šค๋ฅผ ๋‚˜๋ˆ„๋Š” ๋ถ€๋ถ„์„ ์ข€ ์ฃผ์˜ํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค.


1. ๋ณ€์ˆ˜ ์„ ์–ธ์€ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ํ•˜์˜€๋‹ค. ์ผ€์ด์Šค์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์‹ถ์–ด์„œ int๋ฐฐ์—ด๋ณด๋‹ค๋Š” ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜์˜€๊ณ , ๊ฐ•๋„๋ฅผ ์ €์žฅํ•˜๋Š” board์™€ ํ•ด๋‹น ์œ„์น˜๊ฐ€ ์ด๋ฏธ ๋ถ€๋ฉ”๋ž‘์— ์‚ฌ์šฉ๋œ ๋ถ€๋ถ„์ธ์ง€ ํŒ๋‹จํ•˜๋Š” visited๋ฐฐ์—ด์„ ์„ ์–ธํ–ˆ๋‹ค.

static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static int N, M;
    static int[][] board;
    static boolean[][] visited;
    static Coordinate[][] boomerangCase = {
            {new Coordinate(1, 0), new Coordinate(0, 0), new Coordinate(0, 1)},
            {new Coordinate(1, 0), new Coordinate(0, 0), new Coordinate(0, -1)},
            {new Coordinate(-1, 0), new Coordinate(0, 0), new Coordinate(0, 1)},
            {new Coordinate(-1, 0), new Coordinate(0, 0), new Coordinate(0, -1)},
    };

    static int result = 0;

 

2. ๋‹ค์Œ์€ ์ขŒํ‘œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. x, y ์ขŒํ‘œ๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ , dfs์— ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ๊ณ„์†ํ•˜์—ฌ ์ž…๋ ฅ์‹œํ‚ฌ ์˜ˆ์ •์ด๋ผ ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋†“์•˜๋‹ค.

class Coordinate {
    int x;
    int y;

    public Coordinate(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Coordinate nextCoordinate(int m){
        int x2 = x;
        int y2 = y;
        y2++;
        if(y2 >= m){
            x2++;
            y2 = 0;
        }
        return new Coordinate(x2, y2);
    }
}

 

3. dfs๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. 0,0 ์ขŒํ‘œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ํ˜„์žฌ ์ขŒํ‘œ๊ฐ€ ์ค‘์‹ฌ์ด ๋˜๋Š” ๋ถ€๋ฉ”๋ž‘์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ง€ ์šฐ์„  ํ™•์ธํ•œ๋‹ค.

for (Coordinate coordinate : coordinates) {
  if (!checkInside(cur.x + coordinate.x, cur.y + coordinate.y) || visited[cur.x + coordinate.x][cur.y + coordinate.y]) {
    able = false;
    break;
  }
}

4. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ํ•ด๋‹น ๋ถ€๋ฉ”๋ž‘ ์œ„์น˜์˜ ๊ฐ•๋„๋ฅผ ๋ชจ๋‘ ๋”ํ•˜๊ณ  visited(์ด๋ฏธ ๋ถ€๋ฉ”๋ž‘์„ ๋งŒ๋“  ์œ„์น˜)๋„ true๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ดํ›„, ๋‹ค์Œ ์œ„์น˜๋กœ ๊ฐ€์„œ ๋ถ€๋ฉ”๋ž‘์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚จ๋‹ค.

5.๊ณ„์‚ฐ์€ ์žฌ๊ท€์ ์œผ๋กœ ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ํ•จ์ˆ˜์— ๋งก๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐ์ด ๋๋‚ฌ์„ ๋•Œ, ํ˜„์žฌ ์ฒดํฌํ–ˆ๋˜ ๊ฐ•๋„์˜ ๊ฐ’๊ณผ ๋งŒ๋“ค์—ˆ๋˜ ์œ„์น˜๋ฅผ ๋ณต๊ท€ ์‹œ์ผœ์•ผ ํ•œ๋‹ค. (๋‹ค๋ฅธ ๋ชจ์–‘์˜ ๋ถ€๋ฉ”๋ž‘๋„ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ)

6. ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์ค‘์‹ฌ์ด ๋˜๋Š” ๋ถ€๋ฉ”๋ž‘์ด ํฌํ•จ๋˜์ง€ ์•Š๋”๋ผ๋„ ์ตœ๋Œ“๊ฐ’์ด ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์ค‘์‹ฌ์ด ๋˜๋Š” ๋ถ€๋ฉ”๋ž‘์˜ ๊ฒฝ์šฐ๊ฐ€ ๋๋‚ฌ์œผ๋ฉด ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ทธ๋ƒฅ ์Šคํ‚ตํ•˜๊ณ  ๋‹ค์Œ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋กœ์ง๋„ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š” ์žฌ๊ท€ ํ•จ์ˆ˜๋„ ํฌํ•จ์‹œํ‚จ๋‹ค. 

public static void makeBoomerang(Coordinate cur, int totalStrength) {

        if(cur.x >= N){
            result = Math.max(result, totalStrength);
            return;
        }

        for (Coordinate[] coordinates : boomerangCase) {

            boolean able = true;

            for (Coordinate coordinate : coordinates) {
                if (!checkInside(cur.x + coordinate.x, cur.y + coordinate.y) || visited[cur.x + coordinate.x][cur.y + coordinate.y]) {
                    able = false;
                    break;
                }
            }

            if(able){
                for (Coordinate coordinate : coordinates) {
                    if(coordinate.x == 0 && coordinate.y == 0){
                        totalStrength += board[cur.x + coordinate.x][cur.y + coordinate.y] * 2;
                    }else{
                        totalStrength += board[cur.x + coordinate.x][cur.y + coordinate.y];
                    }

                    visited[cur.x + coordinate.x][cur.y + coordinate.y] = true;
                }

                makeBoomerang(cur.nextCoordinate(M), totalStrength);

                for (Coordinate coordinate : coordinates) {
                    if(coordinate.x == 0 && coordinate.y == 0){
                        totalStrength -= board[cur.x + coordinate.x][cur.y + coordinate.y] * 2;
                    }else{
                        totalStrength -= board[cur.x + coordinate.x][cur.y + coordinate.y];
                    }

                    visited[cur.x + coordinate.x][cur.y + coordinate.y] = false;
                }
            }
        }
        makeBoomerang(cur.nextCoordinate(M), totalStrength);
    }

    public static boolean checkInside(int x, int y){
        return x >= 0 && x < N && y >= 0 && y < M;
    }

โœ”์ „์ฒด ์ฝ”๋“œ

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

class Main {

    //dfs
    //์‹ ๊ฒฝ์“ธ ์ : ์ผ€์ด์Šค ๋‚˜๋ˆ„๊ธฐ
    //          ํƒˆ์ถœ ์กฐ๊ฑด

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static int N, M;
    static int[][] board;
    static boolean[][] visited;
    static Coordinate[][] boomerangCase = {
            {new Coordinate(1, 0), new Coordinate(0, 0), new Coordinate(0, 1)},
            {new Coordinate(1, 0), new Coordinate(0, 0), new Coordinate(0, -1)},
            {new Coordinate(-1, 0), new Coordinate(0, 0), new Coordinate(0, 1)},
            {new Coordinate(-1, 0), new Coordinate(0, 0), new Coordinate(0, -1)},
    };

    static int result = 0;

    public static void main(String[] args) throws IOException {
        st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        board = new int[N][M];
        visited = new boolean[N][M];

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < M; j++) {
                board[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        makeBoomerang(new Coordinate(0, 0), 0);

        System.out.println(result);
    }

    public static void makeBoomerang(Coordinate cur, int totalStrength) {

        if(cur.x >= N){
            result = Math.max(result, totalStrength);
            return;
        }

        for (Coordinate[] coordinates : boomerangCase) {

            boolean able = true;

            for (Coordinate coordinate : coordinates) {
                if (!checkInside(cur.x + coordinate.x, cur.y + coordinate.y) || visited[cur.x + coordinate.x][cur.y + coordinate.y]) {
                    able = false;
                    break;
                }
            }

            if(able){
                for (Coordinate coordinate : coordinates) {
                    if(coordinate.x == 0 && coordinate.y == 0){
                        totalStrength += board[cur.x + coordinate.x][cur.y + coordinate.y] * 2;
                    }else{
                        totalStrength += board[cur.x + coordinate.x][cur.y + coordinate.y];
                    }

                    visited[cur.x + coordinate.x][cur.y + coordinate.y] = true;
                }

                makeBoomerang(cur.nextCoordinate(M), totalStrength);

                for (Coordinate coordinate : coordinates) {
                    if(coordinate.x == 0 && coordinate.y == 0){
                        totalStrength -= board[cur.x + coordinate.x][cur.y + coordinate.y] * 2;
                    }else{
                        totalStrength -= board[cur.x + coordinate.x][cur.y + coordinate.y];
                    }

                    visited[cur.x + coordinate.x][cur.y + coordinate.y] = false;
                }
            }
        }
        makeBoomerang(cur.nextCoordinate(M), totalStrength);
    }

    public static boolean checkInside(int x, int y){
        return x >= 0 && x < N && y >= 0 && y < M;
    }
}

class Coordinate {
    int x;
    int y;

    public Coordinate(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Coordinate nextCoordinate(int m){
        int x2 = x;
        int y2 = y;
        y2++;
        if(y2 >= m){
            x2++;
            y2 = 0;
        }
        return new Coordinate(x2, y2);
    }
}

 

๐Ÿ˜„๊ฒฐ๊ณผ

 

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋‹ค๋ฅธ ๊ฒฐ๊ณผ์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‘ ๋ฐฐ์ •๋„ ๋” ์ปธ๋‹ค. ์•„๋งˆ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ๊ณ„์†ํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ–ˆ๋˜ ์ ์ด ์ข€ ํฌ๊ฒŒ ์ž‘์šฉํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

→ ํ•ด๋‹น ๋ถ€๋ฌธ๋งŒ ์ˆ˜์ • ํ–ˆ์„ ๋•Œ ๊ฒฐ๊ณผ

** dfs๋‚˜ ์žฌ๊ท€ ๊ด€๋ จ ๋‹ค๋ฃฐ ๋•Œ ๊ฐ์ฒด ๋ณต์‚ฌ ์ฃผ์˜ํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.