https://www.acmicpc.net/problem/2210
완전 탐색 문제로 모든 좌표에서 시작해서 5번을 더 이동해서
서로 다른 6자리의 수들의 개수를 구하면 된다.
DFS를 통해 완전탐색을 진행하였으며, 특별한 백트래킹 처리는 없지만
문제 분류가 백트래킹으로 되어있어서 백트래킹에 글을 게시했다.
set 자료구조를 통해 중복 없이 구한 수들의 개수를 확인할 수 있도록 했다.
처음에 0이 있을 수도 있기 때문에 자료형을 문자열로 하려다가
6자리의 수를 모두 출력할 필요가 없어서 int형으로 6자리의 수를 구할 수 있도록 했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <iostream> #include <set> using namespace std; #define len 5 int dy[4]={1,-1,0,0}; int dx[4]={0,0,1,-1}; int map[5][5]={0}; set<int> st; void dfs(int y,int x,int cnt,int sum){ if(cnt==len){ st.insert(sum); return; } for(int i=0;i<4;i++){ int ny=y+dy[i]; int nx=x+dx[i]; if(ny<0 || ny>=len || nx<0 || nx>=len) continue; dfs(ny,nx,cnt+1,sum*10+map[ny][nx]); } } int main(){ for(int i=0;i<len;i++) for(int j=0;j<len;j++) cin>>map[i][j]; for(int i=0;i<len;i++){ for(int j=0;j<len;j++){ dfs(i,j,0,map[i][j]); } } cout<<st.size()<<endl; return 0; } | cs |
'알고리즘(BOJ) > 백트래킹' 카테고리의 다른 글
백준 9207번 - 페그 솔리테어 (0) | 2019.04.13 |
---|---|
백준 1339번 - 단어 수학 (0) | 2019.03.30 |
백준 2023번 - 신기한 소수 (0) | 2019.03.29 |
백준 9663번 - N-Queen (2) | 2018.03.16 |