티스토리 뷰

반응형

https://www.acmicpc.net/problem/17129

 

17129번: 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유

첫째 줄에 정보섬 2층의 크기 n과 m이 주어진다. (1 ≤ n,m ≤ 3000, 4 ≤ n×m ≤ 9×106) 이후 n행 m열에 걸쳐 0, 1, 2, 3, 4, 5로만 구성된 Ai,j가 주어진다. Ai,j와 Ai,j+1사이에 공백은 주어지지 않는다. 2,

www.acmicpc.net

 


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 너비 우선 탐색

 


 

⊙ 문제 접근 과정

 

윌리암슨수액빨이딱따구리 식구는 식사를 하고 싶어 하는데 귀찮아서 가장 가까운 곳을 가고 싶어 하는 간단한 문제다.

 

1은 벽, 0은 통로이고 윌리암슨수액빨이딱따구리 식구는 2번이다.

 

3, 4, 5는 각각 청국장, 스시, 맥 앤 치즈인데 아무튼 3, 4, 5로 가면 된다.

 

bfs를 돌려서 가장 가까운 음식점까지의 거리 출력!!

 


 

⊙ 문제 풀이

 

import sys
from collections import deque

input = sys.stdin.readline
N, M = map(int, input().split())
arr = [list(map(int, input().strip())) for _ in range(N)]
visited = [[0]*M for _ in range(N)]
q = deque()
dx = [0,0,-1,1]
dy = [1,-1,0,0]

def bfs(x,y):
    global ans
    q.append([x,y])
    visited[x][y]+=1
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0<=nx<N and 0<=ny<M and arr[nx][ny] != 1 and not visited[nx][ny]:
                    q.append([nx,ny])
                    visited[nx][ny]= visited[x][y] +1
                    if arr[nx][ny] in (3,4,5):
                        print('TAK')
                        print(visited[x][y])
                        exit()
    print('NIE')

for i in range(N):
    for j in range(M):
        if arr[i][j]==2:
            bfs(i,j)

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함