Post

๐Ÿข ๋‹ฌ์ด ์ฐจ์˜ค๋ฅธ๋‹ค, ๊ฐ€์ž

1. ๋ฌธ์ œ ๋งํฌ

1194๋ฒˆ: ๋‹ฌ์ด ์ฐจ์˜ค๋ฅธ๋‹ค, ๊ฐ€์ž


2. ์ฝ”๋“œ

Python3 38828KB 6168ms

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
"""
[1194] ๋‹ฌ์ด ์ฐจ์˜ค๋ฅธ๋‹ค, ๊ฐ€์ž

๐Ÿ’› ๋ฌธ์ œ
์ง€๊ธˆ ๋ฏผ์‹์ด๊ฐ€ ๊ณ„ํšํ•œ ์—ฌํ–‰์€ ๋‹ฌ์ด ๋งจ ์ฒ˜์Œ ๋œจ๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ ๋ถ€ํ„ฐ, ์ค€๋น„ํ–ˆ๋˜ ์—ฌํ–‰๊ธธ์ด๋‹ค.
ํ•˜์ง€๋งŒ, ๋งค๋ฒˆ ๋‹ฌ์ด ์ฐจ์˜ค๋ฅผ ๋•Œ๋งˆ๋‹ค ๋ฏผ์‹์ด๋Š” ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ํ˜„์‹ค์˜ ๋ฒฝ ์•ž์—์„œ ๋‹ค์ง์„ ํฌ๊ธฐํ•˜๊ณ  ๋ง์•˜๋‹ค.

๋ฏผ์‹์ด๋Š” ๋งค๋ฒˆ ์ž์‹ ์˜ ๋‹ค์ง์„ ๋งํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ, ๋ง์„ ํ•˜๋ฉด ์•„๋ฌด๋„ ๋ชป ์•Œ์•„๋“ค์„ ๊ฒƒ๋งŒ ๊ฐ™์•„์„œ, ์ง€๋ ˆ ๊ฒ๋จน๊ณ  ๋ฒ™์–ด๋ฆฌ๊ฐ€ ๋˜์–ด๋ฒ„๋ ธ๋‹ค.
๊ฒฐ๊ตญ ๋ฏผ์‹์ด๋Š” ๋ชจ๋‘ ์ž ๋“  ์ƒˆ๋ฒฝ ๋„ค์‹œ ๋ฐ˜์ฏค ํ™€๋กœ ์ผ์–ด๋‚˜, ์ฐฝ ๋ฐ–์— ๋– ์žˆ๋Š” ๋‹ฌ์„ ๋ณด์•˜๋‹ค.

ํ•˜๋ฃจ๋ฐ–์— ๋‚จ์ง€ ์•Š์•˜๋‹ค. ๋‹ฌ์€ ๋‚ด์ผ์ด๋ฉด ๋‹ค ์ฐจ์˜ค๋ฅธ๋‹ค. ์ด๋ฒˆ์ด ๋งˆ์ง€๋ง‰๊ธฐํšŒ๋‹ค. ์ด๊ฑธ ๋†“์น˜๋ฉด ์˜์˜ ๋ชป๊ฐ„๋‹ค.

์˜์‹์ด๋Š” ๋ฏผ์‹์ด๊ฐ€ ์˜ค๋Š˜๋„ ์—ฌํƒœ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๋ƒฅ ์ž  ๋“ค์–ด๋ฒ„๋ ค์„œ ๋ชป ๊ฐˆ์ง€๋„ ๋ชจ๋ฅธ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌ๊ธฐ์—” ๋ฏผ์‹์ด์˜ ๋ˆˆ์—๋Š” ์ €๊ธฐ ๋œฌ ๋‹ฌ์ด ๋„ˆ๋ฌด๋‚˜ ๋–จ๋ ธ๋‹ค.

๋ฏผ์‹์ด๋Š” ์ง€๊ธˆ ๋ฏธ๋กœ ์†์— ์žˆ๋‹ค. ๋ฏธ๋กœ๋Š” ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์ด๊ณ , ์—ฌํ–‰๊ธธ์„ ๋– ๋‚˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
๋ฏธ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด์ ธ์žˆ๋‹ค.
    ๋นˆ ์นธ: ์–ธ์ œ๋‚˜ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ('.')
    ๋ฒฝ: ์ ˆ๋Œ€ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ('#')
    ์—ด์‡ : ์–ธ์ œ๋‚˜ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณณ์— ์ฒ˜์Œ ๋“ค์–ด๊ฐ€๋ฉด ์—ด์‡ ๋ฅผ ์ง‘๋Š”๋‹ค. ('a', 'b', 'c', 'd', 'e', 'f')
    ๋ฌธ: ๋Œ€์‘ํ•˜๋Š” ์—ด์‡ ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ('A', 'B', 'C', 'D', 'E', 'F')
    ๋ฏผ์‹์ด์˜ ํ˜„์žฌ ์œ„์น˜: ๋นˆ ๊ณณ์ด๊ณ , ๋ฏผ์‹์ด๊ฐ€ ํ˜„์žฌ ์„œ ์žˆ๋Š” ๊ณณ์ด๋‹ค. ('0')
    ์ถœ๊ตฌ: ๋‹ฌ์ด ์ฐจ์˜ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฏผ์‹์ด๊ฐ€ ๊ฐ€์•ผํ•˜๋Š” ๊ณณ์ด๋‹ค. ์ด ๊ณณ์— ์˜ค๋ฉด ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•œ๋‹ค. ('1')

๋‹ฌ์ด ์ฐจ์˜ค๋ฅด๋Š” ๊ธฐํšŒ๋ฅผ ๋†“์น˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ, ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
ํ•œ ๋ฒˆ์˜ ์›€์ง์ž„์€ ํ˜„์žฌ ์œ„์น˜์—์„œ ์ˆ˜ํ‰์ด๋‚˜ ์ˆ˜์ง์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฏผ์‹์ด๊ฐ€ ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ด๋™ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ’š ์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ๋ฏธ๋กœ์˜ ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค N, M โ‰ค 50) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๋ฏธ๋กœ์˜ ๋ชจ์–‘์ด ์ฃผ์–ด์ง„๋‹ค.
๊ฐ™์€ ํƒ€์ž…์˜ ์—ด์‡ ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๋ฌธ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ , ๋ฌธ์— ๋Œ€์‘ํ•˜๋Š” ์—ด์‡ ๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. '0'์€ ํ•œ ๊ฐœ, '1'์€ ์ ์–ด๋„ ํ•œ ๊ฐœ ์žˆ๋‹ค. ์—ด์‡ ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’™ ์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ๋ฏผ์‹์ด๊ฐ€ ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•˜๋Š”๋ฐ ๋“œ๋Š” ์ด๋™ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
๋งŒ์•ฝ ๋ฏผ์‹์ด๊ฐ€ ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœ ํ•  ์ˆ˜ ์—†์œผ๋ฉด, -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
"""

from collections import deque

# ์„ธ๋กœ ํฌ๊ธฐ N๊ณผ ๊ฐ€๋กœ ํฌ๊ธฐ M
n, m = map(int, input().split())
for _ in range(n) :
    maze = list(map(str, input().split()))

dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]

visited = [[[0] for _ in range(m)] for _ in range(n)]
queue = deque()

# ๋นˆ ์นธ: ์–ธ์ œ๋‚˜ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ('.')
# ๋ฒฝ: ์ ˆ๋Œ€ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค. ('#')
# ์—ด์‡ : ์–ธ์ œ๋‚˜ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณณ์— ์ฒ˜์Œ ๋“ค์–ด๊ฐ€๋ฉด ์—ด์‡ ๋ฅผ ์ง‘๋Š”๋‹ค. ('a', 'b', 'c', 'd', 'e', 'f')
# ๋ฌธ: ๋Œ€์‘ํ•˜๋Š” ์—ด์‡ ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ('A', 'B', 'C', 'D', 'E', 'F')
# ๋ฏผ์‹์ด์˜ ํ˜„์žฌ ์œ„์น˜: ๋นˆ ๊ณณ์ด๊ณ , ๋ฏผ์‹์ด๊ฐ€ ํ˜„์žฌ ์„œ ์žˆ๋Š” ๊ณณ์ด๋‹ค. ('0')
# ์ถœ๊ตฌ: ๋‹ฌ์ด ์ฐจ์˜ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฏผ์‹์ด๊ฐ€ ๊ฐ€์•ผํ•˜๋Š” ๊ณณ์ด๋‹ค. ์ด ๊ณณ์— ์˜ค๋ฉด ๋ฏธ๋กœ๋ฅผ ํƒˆ์ถœํ•œ๋‹ค. ('1')
for i in range(n):
    for j in range(m):
        # ์‹œ์ž‘ ์ขŒํ‘œ
        if maze[i][j] == "0":
            # ์ขŒํ‘œ, key
            queue.append([i, j, 0])
            # ๋นˆ์นธ์œผ๋กœ .
            maze[i][j] = "."
            # ๋ฐฉ๋ฌธํ•จ
            visited[i][j][0] = 1

while queue :
    x, y, k = queue.popleft()

    # ์ถœ๊ตฌ, ๋ฏธ๋กœ ํƒˆ์ถœํ•˜๊ธฐ
    if maze[x][y] == "1" :
        answer = visited[x][y] - 1
        break

    for i in range(4) :
        nx = x + dx[i]
        ny = y + dy[i]

        # ๋ฒ”์œ„ ์•ˆ, ๋ฐฉ๋ฌธ ์•ˆํ•จ  ๋ฒฝ ์•„๋‹˜
        if (0 <= nx < n and 0 <= ny < m and visited[x][y] == 0 and maze[nx][ny] != "#") :
            # ์—ด์‡ 
            if maze[nx][ny] in ['a', 'b', 'c', 'd', 'e', 'f'] :
                visited[x][y] = visited[nx][ny] + 1
                queue.append((nx, ny, k))
            # ๋ฌธ
            elif maze[nx][ny] in ['A', 'B', 'C', 'D', 'E', 'F'] :
                visited[x][y] = visited[nx][ny] + 1
                queue.append((nx, ny, k))
            # ๊ธธ
            else :
                visited[x][y] = visited[nx][ny] + 1
                queue.append((nx, ny, k))

print(answer)


3. ํ•ด์„ค

This post is licensed under CC BY 4.0 by the author.