๐Ÿ’ป

[๋ฐฑ์ค€] ์‹œ๋ฎฌ๋ ˆ์ด์…˜ - 14503. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ ๋ณธ๋ฌธ

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

[๋ฐฑ์ค€] ์‹œ๋ฎฌ๋ ˆ์ด์…˜ - 14503. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

๋˜ํšจ๋‹ˆ 2020. 3. 23. 22:36

๋ฌธ์ œ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” N×M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1×1ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นธ์€ ๋ฒฝ ๋˜๋Š” ๋นˆ ์นธ์ด๋‹ค. ์ฒญ์†Œ๊ธฐ๋Š” ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ด ์žˆ์œผ๋ฉฐ, ์ด ๋ฐฉํ–ฅ์€ ๋™, ์„œ, ๋‚จ, ๋ถ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์€ (r, c)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , r์€ ๋ถ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜, c๋Š” ์„œ์ชฝ์œผ๋กœ ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค.

  1. ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ฒญ์†Œํ•œ๋‹ค.
  2. ํ˜„์žฌ ์œ„์น˜์—์„œ ํ˜„์žฌ ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.
    1. ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์•„์ง ์ฒญ์†Œํ•˜์ง€ ์•Š์€ ๊ณต๊ฐ„์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๋‹ค์Œ ํ•œ ์นธ์„ ์ „์ง„ํ•˜๊ณ  1๋ฒˆ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•œ๋‹ค.
    2. ์™ผ์ชฝ ๋ฐฉํ–ฅ์— ์ฒญ์†Œํ•  ๊ณต๊ฐ„์ด ์—†๋‹ค๋ฉด, ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    3. ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ์ด๋ฏธ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ธ ๊ฒฝ์šฐ์—๋Š”, ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    4. ๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ์ด๋ฏธ ๋˜์–ด์žˆ๊ฑฐ๋‚˜ ๋ฒฝ์ด๋ฉด์„œ, ๋’ค์ชฝ ๋ฐฉํ–ฅ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„๋„ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ์ด๋ฏธ ์ฒญ์†Œ๋˜์–ด์žˆ๋Š” ์นธ์„ ๋˜ ์ฒญ์†Œํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์—†๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (3 ≤ N, M ≤ 50)

๋‘˜์งธ ์ค„์— ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ขŒํ‘œ (r, c)์™€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ d๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. d๊ฐ€ 0์ธ ๊ฒฝ์šฐ์—๋Š” ๋ถ์ชฝ์„, 1์ธ ๊ฒฝ์šฐ์—๋Š” ๋™์ชฝ์„, 2์ธ ๊ฒฝ์šฐ์—๋Š” ๋‚จ์ชฝ์„, 3์ธ ๊ฒฝ์šฐ์—๋Š” ์„œ์ชฝ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์…‹์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์žฅ์†Œ์˜ ์ƒํƒœ๊ฐ€ ๋ถ์ชฝ๋ถ€ํ„ฐ ๋‚จ์ชฝ ์ˆœ์„œ๋Œ€๋กœ, ๊ฐ ์ค„์€ ์„œ์ชฝ๋ถ€ํ„ฐ ๋™์ชฝ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋นˆ ์นธ์€ 0, ๋ฒฝ์€ 1๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ง€๋„์˜ ์ฒซ ํ–‰, ๋งˆ์ง€๋ง‰ ํ–‰, ์ฒซ ์—ด, ๋งˆ์ง€๋ง‰ ์—ด์— ์žˆ๋Š” ๋ชจ๋“  ์นธ์€ ๋ฒฝ์ด๋‹ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ƒํƒœ๋Š” ํ•ญ์ƒ ๋นˆ ์นธ์ด๋‹ค.

 

์ถœ๋ ฅ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฒญ์†Œํ•˜๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

3 3
1 1 0
1 1 1
1 0 1
1 1 1

 

์˜ˆ์ œ ์ถœ๋ ฅ1

1

 

์˜ˆ์ œ ์ž…๋ ฅ2

11 10
7 4 0
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 1 1 1 1 0 1
1 0 0 1 1 0 0 0 0 1
1 0 1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1

 

์˜ˆ์ œ ์ถœ๋ ฅ2

57

 

์ƒ๊ฐ

๋ฐฉํ–ฅ์ด ์ฃผ์–ด์ ธ์„œ ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ฐจ๋ก€๋Œ€๋กœ ํƒ์ƒ‰ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๋„ค์นธ์ด ๋ชจ๋‘ ์ฒญ์†Œ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ๋Š” ํ•œ ์นธ์„ ํ›„์ง„ํ•˜๊ณ  ๋Œ์•„๊ฐ„๋‹ค๋Š” ๋ถ€๋ถ„์ด ๊นŒ๋‹ค๋กœ์› ๋˜ ๊ฑฐ ๊ฐ™๋‹ค. ๋ฐฉํ–ฅ ๋ฐฐ์—ด์„ dx,dy๋กœ ์ฐจ๋ก€๋Œ€๋กœ ๋ถ, ๋™, ๋‚จ, ์„œ(0, 1, 2, 3) ์œผ๋กœ ํ•ด์คฌ๊ณ , ํ›„์ง„ ๋ฐฐ์—ด์„ bx, by๋กœ ๋‘์–ด์„œ ๋ถ, ๋™, ๋‚จ, ์„œ์—์„œ ์™ผ์ชฝ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•œ ๊ฐ’์ธ ์„œ, ๋ถ, ๋™, ๋‚จ ์œผ๋กœ ๋ฐฉํ–ฅ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. 

๋ฌธ์ œ์ดํ•ด๋„ ์•ˆ๋˜๊ณ  ๋ณต์žกํ•ด์„œ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋Š”๋ฐ ๋ณด๊ณ  ๋‚˜์„œ ํ’€์–ด๋ณด๋‹ˆ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ๋˜ ๊ฑฐ ๊ฐ™๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ์—์„œ๋Š” ๋ฐฉํ–ฅ ๊ด€๋ จํ•ด์„œ ๋งŽ์ด ์ถœ์ œ๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ข€ ๋” ์ต์ˆ™ํ•ด์ ธ์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

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
#include <iostream>
 
using namespace std;
 
int n, m;
int map[50][50];
bool visited[50][50];
 
// ๋ถ, ๋™, ๋‚จ, ์„œ 
int dx[] = { -1010};
int dy[] = { 010-1};
// ์„œ, ๋ถ, ๋™, ๋‚จ
int bx[] = { 10-10};
int by[] = { 0-101};
int cnt = 0;
 
void dfs(int x, int y, int d){
    bool flag = true;
 
    if(map[x][y] == 0){ //์ฒญ์†Œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์นธ์ธ์ง€ ์ฒดํฌ
        cnt ++;
        map[x][y] = 2//์ฒญ์†Œํ–ˆ์Œ
    }
    for(int i=d-1; i>d-5; i--){
        int dir = (i+4)%4//๋ฐฉํ–ฅ์ „ํ™˜
        int nx = x + dx[dir];
        int ny = y + dy[dir];
 
        if(nx<0 || ny<0 || nx>=|| ny>=m) continue;
 
        if(map[nx][ny] == 0){ //์ฒญ์†Œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์นธ์ธ์ง€ ์ฒดํฌ 
            dfs(nx, ny, dir);
            return;
        }
    }
    if(map[x+bx[d]][y+by[d]] == 1){ //ํ›„์ง„์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์นธ
        flag = false
    }else if(flag){ //ํ›„์ง„์ด ๊ฐ€๋Šฅํ•œ ์นธ
        dfs(x+bx[d], y+by[d], d);
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    int r, c, d;
    
    cin >> n >> m;
    cin >> r >> c >> d;
 
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cin >> map[i][j];
        }
    }    
    dfs(r, c, d);
    cout << cnt <<"\n";
    return 0;
}
 
Colored by Color Scripter
๋ฐ˜์‘ํ˜•
Comments