코딩왕랄프👊🏻

[백준] 2210번 숫자판 점프 본문

백준

[백준] 2210번 숫자판 점프

hyerm_2 2023. 7. 28. 09:40
반응형
SMALL

문제

5×5 크기의 숫자판이 있다. 각각의 칸에는 숫자(digit, 0부터 9까지)가 적혀 있다. 이 숫자판의 임의의 위치에서 시작해서, 인접해 있는 네 방향으로 다섯 번 이동하면서, 각 칸에 적혀있는 숫자를 차례로 붙이면 6자리의 수가 된다. 이동을 할 때에는 한 번 거쳤던 칸을 다시 거쳐도 되며, 0으로 시작하는 000123과 같은 수로 만들 수 있다.

숫자판이 주어졌을 때, 만들 수 있는 서로 다른 여섯 자리의 수들의 개수를 구하는 프로그램을 작성하시오.

입력

다섯 개의 줄에 다섯 개의 정수로 숫자판이 주어진다.

출력

첫째 줄에 만들 수 있는 수들의 개수를 출력한다.

 

const _input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");

function solution(input) {
    const graph = input.map((item) => item.split(" "));
    let answer = [];

    for (let i = 0; i < 5; i++) {
        for (let j = 0; j < 5; j++) {
            DFS(i, j, "");
        }
    }

    return answer.length;

    function DFS(y, x, num) {
        if (num.length === 6) {
            if (!answer.includes(num)) answer.push(num);
            return;
        } else {
            if (y - 1 >= 0) DFS(y - 1, x, num + graph[y][x]);
            if (y + 1 <= 4) DFS(y + 1, x, num + graph[y][x]);
            if (x - 1 >= 0) DFS(y, x - 1, num + graph[y][x]);
            if (x + 1 <= 4) DFS(y, x + 1, num + graph[y][x]);
        }
    }
}

console.log(solution(_input));
반응형
LIST