ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

16954๋ฒˆ: ์›€์ง์ด๋Š” ๋ฏธ๋กœ ํƒˆ์ถœ

์šฑ์ œ๋Š” ํ•™๊ต ์ˆ™์ œ๋กœ ํฌ๊ธฐ๊ฐ€ 8×8์ธ ์ฒด์ŠคํŒ์—์„œ ํƒˆ์ถœํ•˜๋Š” ๊ฒŒ์ž„์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ฒด์ŠคํŒ์˜ ๋ชจ๋“  ์นธ์€ ๋นˆ ์นธ ๋˜๋Š” ๋ฒฝ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์šฑ์ œ์˜ ์บ๋ฆญํ„ฐ๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ ์•„๋žซ ์นธ์— ์žˆ๊ณ , ์ด ์บ๋ฆญํ„ฐ๋Š” ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 8x8์˜ ์ฒด์ŠคํŒ์ด ์žˆ์„ ๋•Œ, ์ด 9๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์ƒ, ํ•˜, ์ขŒ, ์šฐ, ๋Œ€๊ฐ์„  ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์œ„์น˜์— ๊ทธ๋Œ€๋กœ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด ์ฒด์ŠคํŒ์ด ์•„๋ž˜๋กœ ์ด๋™ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ์ œ ์ž…๋ ฅ 2์˜ ๊ฒฝ์šฐ๋Š” 1์ดˆ์˜ ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ•˜๋ฉด์„œ ๋ฒฝ์˜ ์œ„์น˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™”ํ•œ๋‹ค.

current		|	after 1 sec
........	|	........
........	|	........
........	|	........
........	|	........
........	|	........
........	|	........
##......	|	........
........	|	##......

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

 

 ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” BFS๋ฅผ ์ด์šฉํ•œ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰๊ณผ ๋™์ผํ•˜๊ฒŒ ํ’€๋˜ ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ์ง€์ ์ด ๋ฒฝ์ด๋ผ๋ฉด ๋” ์ด์ƒ ๊ฒฝ์šฐ์— ์ˆ˜์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ ๊นŒ์ง€๋งŒ ์ƒ๊ฐํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€ ๊ฒฝ์šฐ, 23%์ฏค์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๋ฅผ ์ง๋ฉดํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ๋ถ€๋ถ„์„ ์ƒ๋žตํ•˜์˜€์„๊นŒ ๊ณฐ๊ณฐ์ด ์ƒ๊ฐํ•ด๋ณด๋‹ˆ, visited๋ฅผ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ด๋™ํ•œ๋‹ค๋ฉด ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋‹ค์‹œ ์ฒดํฌํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 ์ฆ‰, ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด ๋‹ค๋ฅธ ๊ทธ๋ž˜ํ”„์ด๊ณ , ๋‹ค๋ฅธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ์•ผ ํ•˜๋ฏ€๋กœ visited๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค๊ณผ ๊ฐ™์ด ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฝ”๋“œ

from sys import stdin
from collections import deque


def visitable(x, y, visited):
    return 0 <= x < 8 and 0 <= y < 8 \
           and graph[x][y] == '.' and not visited[x][y]


def bfs(start):
    q = deque([start])
    dirs = ((0, 0),
            # ์ƒํ•˜์ขŒ์šฐ
            (0, 1), (0, -1), (1, 0), (-1, 0),
            # ๋Œ€๊ฐ์„ 
            (1, 1), (1, -1), (-1, 1), (-1, -1))

    while q:
        # ๋ฒฝ์ด ์ด๋™ํ•œ ํ›„์—, ๋‹ค์‹œ ์ฒดํฌํ•ด์ค˜์•ผํ•œ๋‹ค.
        visited = [[False] * 8 for _ in range(8)]
        for _ in range(len(q)):
            cur_x, cur_y = q.popleft()

            if [cur_x, cur_y] == [0, 7]:
                return 1

            if graph[cur_x][cur_y] == '#':
                continue

            for x, y in dirs:
                next_x, next_y = cur_x + x, cur_y + y

                if visitable(next_x, next_y, visited):
                    visited[next_x][next_y] = True
                    q.append([next_x, next_y])

        # ํ–‰์„ ์•„๋ž˜๋กœ ์ด๋™
        graph.pop()
        graph.insert(0, ['.', '.', '.', '.', '.', '.', '.', '.'])

    return 0


if __name__ == '__main__':
    graph = [list(stdin.readline().strip()) for _ in range(8)]
    print(bfs([7, 0]))

 ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ์‹์€ ์ดˆ๊ธฐ์— ์ž…๋ ฅ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ์œ ์ง€ํ•œ ์ฑ„๋กœ ์‹œ๊ฐ„์— ๋”ฐ๋ผ x๋ฅผ x - time๊ณผ ๊ฐ™์ด ์ง€์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ œ์—์„œ๋Š” `pop`, `insert`์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ, ํ–‰์„ ์ง์ ‘ ์ด๋™์‹œ์ผฐ๋‹ค. ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์ •๋‹ต์„ ๋ฐ˜์˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด, ํ•ด๋‹น ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€