쌓고 쌓다

[백준] 숫자판 점프 2210번 C++ 풀이 본문

알고리즘/백준

[백준] 숫자판 점프 2210번 C++ 풀이

승민아 2021. 12. 20. 15:39

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 <string>
#include <cstdlib>
using namespace std;
string arr[5][5];
bool visit[1000000];
int side[4][2] = { {-1,0},{1,0},{0,-1},{0,1} };
int res = 0;
void DFS(int y, int x, int cnt, string str)
{
	if (cnt == 6)
	{
		if (visit[stoi(str)] == false) // stoi(str) : str을 int로 반환, 방문한적 없다면 추가
		{
			res++;
			visit[stoi(str)] = true; 
		}
		return;
	}

	for (int i = 0; i < 4; i++)
	{
		int ny = y + side[i][0];
		int nx = x + side[i][1];
		if(nx>=0&&ny>=0&&nx<5&&ny<5)
			DFS(ny, nx, cnt + 1,str+arr[ny][nx]);
	}
}

int main(void)
{
	for (int i = 0; i < 5; i++)
		for (int j = 0; j < 5; j++)
			cin >> arr[i][j];

	for (int i = 0; i < 5; i++)
		for (int j = 0;j<5;j++)
			DFS(i,j,0,"");
	cout << res;
}

string 으로 안풀고 int로 풀려면 (선택한 횟수+1)*10에다가 선택한 수를 곱하여 주어 다음 깊이에 넘겨주면 될것 같다~

Comments