PS (C, C++)

[백준/C++] 22120 숫자판 점프

최연재 2024. 11. 17. 20:57

https://www.acmicpc.net/problem/2210

코드

#include <iostream>
using namespace std;

#define FASTIO ios::sync_with_stdio(false);cin.tie(NULL);
int arr[5][5], ans = 0;
bool visit[1000000];

int dx[4] = { 1, -1, 0, 0 }, dy[4] = { 0, 0, 1, -1 };

void dfs(int x, int y, int sum, int cnt) {
	if (cnt == 5) {
		if (!visit[sum]) {
			visit[sum] = true;
			ans++;
		}
		return;
	}

	for (int i = 0; i < 4; i++) {
		int gx = x + dx[i];
		int gy = y + dy[i];

		if (gx >= 0 && gy >= 0 && gy < 5 && gx < 5)
			dfs(gx, gy, sum * 10 + arr[gx][gy], cnt + 1);
	}
}

int main() {
	FASTIO;
	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, arr[i][j], 0);

	cout << ans;
	return 0;
}

 

설명

현재 위치에서 dfs로 5번 이동하며 만들 수 있는 숫자의 개수를 구합니다. dfs 시에는 한 번 거쳤던 칸을 지나도 되므로 이동 과정에서는 방문 처리를 할 필요가 없습니다. 최종적으로 얻게 되는 값이 현재까지 나온 적이 없으면 visit 배열에 true로 표시 후 결과 개수를 증가시킵니다. 이후 결과 개수를 출력합니다.

 

느낀 점

기본적인 dfs 문제입니다.

'PS (C, C++)' 카테고리의 다른 글

[백준/C++] 22352 항체 인식  (0) 2024.11.20
[백준/C++] 9205 맥주 마시면서 걸어가기  (1) 2024.11.18
[백준/C++] 13903 출근  (0) 2024.11.16
[백준/C++] 6593 상범 빌딩  (0) 2024.11.15
[백준/C++] 14226 이모티콘  (2) 2024.11.14