슈뢰딩거의 고등어

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

알고리즘

[백준] 2210 숫자판 점프

슈뢰딩거의 고등어 2022. 1. 24. 01:58

https://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>
#include <vector>
#include <cmath>
using namespace std;

const int dy[] = {-1, 1, 0, 0};
const int dx[] = {0, 0, -1, 1};
int arr[5][5];
bool check[1000000];
int answer;

void dfs(int y, int x, int cnt, int num, int target) {
	if(cnt == target) {
		if(check[num] == false) {
			check[num] = true;
			answer++;
		}
		return;
	}

	for(int i=0; i<4; i++) {
		int ny = y + dy[i];
		int nx = x + dx[i];
		if(ny < 0 || nx < 0 || ny >= 5 || nx >= 5) continue;
		int new_num = num + arr[ny][nx] * pow(10, 5-cnt);
		dfs(ny, nx, cnt+1, new_num, target);
	}
}

int main(){

	for(int i=0; i<5; i++)
		for(int j=0; j<5; j++)
			scanf("%d", &arr[i][j]);

	for(int y=0; y<5; y++)
		for(int x=0; x<5; x++) {
			int num = arr[y][x] * pow(10, 5);
			dfs(y, x, 1, num, 6);
		}


	printf("%d\n", answer);


	return 0;
}

depth 가 6이면 되기때문에 dfs 로 구한다. 현재위치 x, y 를 인자로 하는 dfs 를 만든다.

각 들어온 노드들의 값을 vector 에 저장하기보단 num 을 사용해서 int 형으로 각 자리수를 더해 전달한다.

'알고리즘' 카테고리의 다른 글

[백준] 17089 세친구  (0) 2022.01.24
[백준] 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데  (0) 2022.01.24
[백준] 16943 숫자재배치  (0) 2022.01.24
진수 변환  (0) 2022.01.20
[백준] 16936 나3곱2  (0) 2022.01.20
Comments