๐Ÿ’ป

[๋ฐฑ์ค€] ๋ฐฑํŠธ๋ž˜ํ‚น - 2210. ์ˆซ์žํŒ ์ ํ”„ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ๋ฐฑํŠธ๋ž˜ํ‚น - 2210. ์ˆซ์žํŒ ์ ํ”„

๋˜ํšจ๋‹ˆ 2020. 3. 8. 21:55

๋ฌธ์ œ

5×5 ํฌ๊ธฐ์˜ ์ˆซ์žํŒ์ด ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นธ์—๋Š” ์ˆซ์ž(digit, 0๋ถ€ํ„ฐ 9๊นŒ์ง€)๊ฐ€ ์ ํ˜€ ์žˆ๋‹ค. ์ด ์ˆซ์žํŒ์˜ ์ž„์˜์˜ ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•ด์„œ, ์ธ์ ‘ํ•ด ์žˆ๋Š” ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์„ฏ ๋ฒˆ ์ด๋™ํ•˜๋ฉด์„œ, ๊ฐ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆซ์ž๋ฅผ ์ฐจ๋ก€๋กœ ๋ถ™์ด๋ฉด 6์ž๋ฆฌ์˜ ์ˆ˜๊ฐ€ ๋œ๋‹ค. ์ด๋™์„ ํ•  ๋•Œ์—๋Š” ํ•œ ๋ฒˆ ๊ฑฐ์ณค๋˜ ์นธ์„ ๋‹ค์‹œ ๊ฑฐ์ณ๋„ ๋˜๋ฉฐ, 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” 000123๊ณผ ๊ฐ™์€ ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ˆซ์žํŒ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ์„ฏ ์ž๋ฆฌ์˜ ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

๋‹ค์„ฏ ๊ฐœ์˜ ์ค„์— ๋‹ค์„ฏ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ˆซ์žํŒ์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 2 1
1 1 1 1 1

 

์˜ˆ์ œ ์ถœ๋ ฅ1

15

 

ํžŒํŠธ

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋“ค์ด๋‹ค.

 

์ƒ๊ฐ

์ˆซ์ž ์ค‘๋ณต์ฒดํฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜ ๊ณ ๋ฏผํ–ˆ์—ˆ๋‹ค. ์ฒ˜์Œ์ž‘์„ฑํ–ˆ๋˜ ์ฝ”๋“œ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. ์˜คํƒ€๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ  ๋ฐฐ์—ด์— 6์ž๋ฆฌ์ˆซ์ž ๊ฐ’ ๋„ฃ๊ณ  ์ค‘๋ณต์ฒดํฌ true, false ํ•˜๋ คํ–ˆ์—ˆ๋‹ค. 

๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ set์ด๋ผ๋Š” ์ž๋ฃŒํ˜•์ด ์žˆ๋”๋ผ. ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ํŠน์ง•์ด๊ณ , ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋ ค๋ฉด multiset์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

์ •๋‹ต๋ฅ ์ฒ˜๋Ÿผ ์‰ฌ์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ๋˜ ๊ฑฐ ๊ฐ™์€๋ฐ ํ ... 

 

http://www.cplusplus.com/reference/set/set/

 

set - C++ Reference

difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t

www.cplusplus.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
#include <iostream>
#include <set>
 
using namespace std;
 
int digit[5][5];
int dx[] = {-1100};
int dy[] = {00-11};
int num;
set<int> s;
 
void DFS(int x, int y, int n){
    int temp = 0;
    if(n == 6){
        s.insert(num);
        return;
    }
    for(int i=0; i<4; i++){
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (nx < 0 || ny < 0 || nx >= 5 || ny >= 5)
            continue;
        temp = num;
        num = (num * 10+ digit[nx][ny];
        DFS(nx, ny, n+1);
        num = temp;
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
    
    for(int i=0; i<5; i++){
        for(int j=0; j<5; j++){
            cin >> digit[i][j];
        }
    }
    
    for(int i=0; i<5; i++){
       for(int j=0; j<5; j++){
           DFS(i, j, 0);
       }
    }
    
    cout << s.size();
    
    return 0;
}
 
 
Colored by Color Scripter
๋ฐ˜์‘ํ˜•
Comments