[백준 알고리즘]/[C++]

백준 2210 숫자판 점프 | DFS | C++

말하는펭귄 2021. 3. 12. 10:14
728x90
반응형

 

 

이번 포스팅은 백준 2210번 숫자판 점프입니다.

아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.

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 (깊이 우선 탐색)

 

참고

line 46-47 벡터의 중복 원소 제거

 

C++ vector 중복 원소 삭제

1. unique 함수 unique 함수는 vector에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수 (algorithm 헤더에 정의) 자신이 바꾼 vector의 end()를 반환 (중복 원소들(쓰레기 값들)의 첫 번째 위치 리턴)

scarlettb.tistory.com

 

 

전체 코드

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
//백준2210 숫자판점프                                                        
 
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int map[5][5];
int dy[] = { 0,0,-1,1 };
int dx[] = { -1,1,0,0 };
vector<int> v;
 
void DFS(int y, int x, int num, int cnt) {
    if (cnt == 6) {
        v.push_back(num);
        return;
    }
 
    for (int i = 0; i < 4; i++) {
        int ny = y + dy[i];
        int nx = x + dx[i];
 
        if (ny < 0 || nx < 0 || ny >= 5 || nx >= 5)
            continue;
 
        DFS(ny, nx, num * 10 + map[ny][nx], cnt+1);
    }
}
 
int main() {
    /*입력*/
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            cin >> map[i][j];
        }
    }
 
    /*모든 좌표의 DFS 경로 탐색*/
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            DFS(i, j, 00);
        }
    }
 
    /*벡터의 중복 원소 제거*/
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
 
    /*정답 출력*/
    cout << v.size();
}
cs

 

 

 

 

 

728x90
반응형