ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 2151 |
문제명 | 거울 설치 |
레벨 | 골드 4 |
분류 |
BFS |
시간복잡도 | O(n^3) |
인풋사이즈 | n<=50 |
사용한 언어 | Python |
제출기록 | 34832KB / 172ms |
최고기록 | 64ms |
해결날짜 | 2022/01/22 |
"""Solution code for "BOJ 2151. 거울 설치".
- Problem link: https://www.acmicpc.net/problem/2151
- Solution link: http://www.teferi.net/ps/problems/boj/2151
Tags: [BFS]
"""
from teflib import tgraph
MIRROR, DOOR, WALL, EMPTY = '!', '#', '*', '.'
def main():
N = int(input())
grid = [input() for _ in range(N)]
graph = []
doors = []
nodes_in_cols = [[] for _ in range(N)]
for row in grid:
nodes_in_row = []
for nodes_in_col, cell in zip(nodes_in_cols, row):
if cell == WALL:
nodes_in_row.clear()
nodes_in_col.clear()
elif cell in (MIRROR, DOOR):
node_num = len(graph)
neighbors = nodes_in_row + nodes_in_col
graph.append(neighbors)
for neighbor in neighbors:
graph[neighbor].append(node_num)
if cell == DOOR:
doors.append(node_num)
nodes_in_row.append(node_num)
nodes_in_col.append(node_num)
answer = tgraph.min_distances(graph, doors[0])[doors[1]] - 1
print(answer)
if __name__ == '__main__':
main()