개발자 톡

연습문제 톡 나무 섭지

동시에 도착하는 경우 처리 방법

등록일
2024-12-21 00:51:29
조회수
85
작성자
sharks619

import sys

from collections import deque


dirs = [(0,1),(1,0),(0,-1),(-1,0)]

n, m = map(int, sys.stdin.readline().split())

maps = [list(sys.stdin.readline().strip()) for _ in range(n)]


queue = deque()

nv = [[False] * m for _ in range(n)]

gv = [[False] * m for _ in range(n)]


for i in range(n):

  for j in range(m):

    if maps[i][j] == 'N':

      queue.append((i, j, 'N'))

      nv[i][j] = True

    elif maps[i][j] == 'G':

      queue.append((i, j, 'G'))

      gv[i][j] = True

def bfs():


  while queue:

    x, y, who = queue.popleft()


    for d in range(4):

      nx, ny = x + dirs[d][0], y + dirs[d][1]


      if 0 <= nx < n and 0 <= ny < m:

        if who == 'N':

          if not nv[nx][ny] and not gv[nx][ny] and maps[nx][ny] != '#':

            if maps[nx][ny] == 'D':

              return "Yes"

            nv[nx][ny] = True

            queue.append((nx, ny, 'N'))

        elif who == 'G':

          if not gv[nx][ny]:

            gv[nx][ny] = True

            queue.append((nx, ny, 'G'))

  return "No"


print(bfs())


위 코드에서는 남우가 도착지에 도착하면 바로 yes를 출력하는데요

여기서 도착지에 유령도 같은 시각에 도착하는 경우에 대해선 고려가 안되는 것 같은데 문제는 다 맞더라고요

혹시 제가 놓치고 있는게 있을까요?

#나무_섭지

이 카테고리의 톡 더보기