BOJ 2210 :: 숫자판 점프
문제 링크 : https://www.acmicpc.net/problem/2210
만들 수 있는 수를 백트래킹하며 찾아내는 문제이다.
수는 (현재 만들어진수*10 + 보드에 쓰여진 수)를 하며 갱신하였고 수의 마지막 자리를 지울 때에는 10을 나누면서 지워나갔다.
중요한 것은 지워 나갈 때, 초기 값인 0으로 number를 되돌리기 위해서는 함수 바깥에서 한번 더 지워주어야 한다는 것이다!
나의 코드
Guithub : https://github.com/j2wooooo/Daliy_Algorithms/blob/master/Daliy_Algorithms/BOJ_2210/BOJ_2210.cpp
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | // 백준알고리즘 2210번 :: 숫자판 점프 #include<iostream> using namespace std; int ans; int board[5][5]; bool flag[1000000]; int number; int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 }; void search(int x, int y, int count) { number = number*10 + board[x][y]; if(count == 6) { // 이미 체크된 숫자인지 확인 if (!flag[number]) { flag[number] = true; ans++; } return; } for (int i = 0; i < 4; i++) { int mx = x + dx[i]; int my = y + dy[i]; if (mx >= 0 && mx < 5 && my >= 0 && my < 5) { search(mx, my, count+1); number /= 10; } } } int main() { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { cin >> board[i][j]; } } for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { search(i, j, 1); number /= 10; } } cout << ans; return 0; } | cs |
'Problem > ETC' 카테고리의 다른 글
[C/C++] BOJ 2529 :: 부등호 (0) | 2019.01.12 |
---|---|
[C/C++] BOJ 12101 :: 1, 2, 3 더하기 2 (0) | 2019.01.12 |
[백준알고리즘] 1005번 ACM Craft (0) | 2019.01.08 |
[백준알고리즘] 1152번 단어의 개수 (0) | 2019.01.08 |
[백준알고리즘] 9012번 괄호 (0) | 2018.11.27 |