관리 메뉴

기억을 위한 기록들

[백준 2210: 숫자판 점프] - C++ 본문

Coding Test - cpp/DFS

[백준 2210: 숫자판 점프] - C++

에드윈H 2021. 2. 18. 17:03

www.acmicpc.net/problem/2210

 

2210번: 숫자판 점프

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다.

www.acmicpc.net

#include <iostream>
using namespace std;

int map[6][6];

int dir[4][2] = {
	 {-1,0}
	,{0,1}
	,{1,0}
	,{0,-1}
};

int check[1000000];
int result;

void dfs(int x, int y, int sum, int depth) {
	
	if (depth == 5)
	{
		if (check[sum] == 0)
		{
			check[sum] = 1;
			result++;
		}
		return;
	}

	for (int i = 0; i < 4; i++) {
		int nx = x + dir[i][0];
		int ny = y + dir[i][1];

		if (nx < 1 || ny < 1 || nx>5 || ny>5)
		{
			continue;
		}
		int nextNum = (sum * 10) + map[nx][ny];
		dfs(nx, ny, nextNum, depth + 1);
	}
}

int main()
{
	for (int i = 1; i <= 5; i++)
	{
		for (int j = 1; j <= 5; j++)
		{
			cin >> map[i][j];
		}
	}

	for (int i = 1; i <= 5; i++)
	{
		for (int j = 1; j <= 5; j++)
		{
			dfs(i, j, map[i][j], 0);
		}
	}

	cout << result;
}