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

DFS + Bruteforce 문제입니다. 중복 값을 제거해주는 Set를 선언해줍니다. 그리고 길이가 6이 될 때 까지 값을 하나씩 추가해줘야하는데, 예시를 들어 값이 112에서 1을 추가한다면 112(기존 값) * 10 + 1(새로운 값)이 되어야 합니다.
그래서 함수 세 번째 파라미터에서 함수 num * 10 + a[nx][ny]를 호출해주었습니다.
<코드>
#include <iostream>
#include <set>
#define n 5
using namespace std;
set<int> ans;
int a[6][6];
int mov[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
void go(int x, int y, int num, int len)
{
if (len == 6)
{
ans.insert(num);
return;
}
for (int k = 0; k < 4; k++)
{
int nx = x + mov[k][0];
int ny = y + mov[k][1];
if (nx >= 0 && nx < n && ny >= 0 && ny < n)
{
go(nx, ny, num * 10 + a[nx][ny], len + 1);
}
}
}
int main()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
go(i, j, a[i][j], 1);
}
}
cout << ans.size() << '\n';
}
'PS > 브루트포스 알고리즘[Bruteforce]' 카테고리의 다른 글
백준 1806 부분합(c++) (1) | 2023.02.15 |
---|---|
백준 1644 소수의 연속합(c++) (0) | 2023.02.14 |
백준 17089 세 친구(c++) (0) | 2023.01.24 |
백준 2422 한윤정이 이탈리아에 가서 아이스크림을 사먹는데(c++) (4) | 2023.01.24 |
백준 16943 숫자 재배치(c++) (0) | 2023.01.24 |