[파이썬/python] 백준 17129 - 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유

2024. 9. 7. 22:03·알고리즘
반응형

문제

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

문제 설명

  1. 0이면 빈 복도여서 지나갈 수 있고, 1이면 장애물로 막혀 지나갈 수 없다.
    1. 윌리암슨수액빨이딱따구리 식구는 2, 청국장은 3, 스시는 4, 맥앤치즈는 5이다.
  2. 윌리암슨수액빨이딱따구리는 단위 시간마다 한 칸, 상하좌우로 움직일 수 있다.
  3. 시작점은 현재 위치 2이며, 어떤 음식에 가장 빠르게 도착하는지 구한다.
  4. "TAK"을 출력 후 음식까지의 최단 거리를 출력한다. 이 때 음식을 먹을 수 없다면 "NIE"를 출력한다.

 


풀이

너비 우선 탐색을 이용했다.

 

  1. 범위 내에서 해당 위치를 방문하지 않았고, 이동한 위치가 2보다 클 때(해당 위치가 장애물이 아닌 음식이라면)
    "TAK"을 출력하고 최단 거리를 출력한다.
  2. 해당 위치가 빈 복도라면 queue에 넣고 방문처리한다.

코드

import sys
from collections import deque
input = sys.stdin.readline



n,m = map(int,input().split())
board = [[] for _ in range(n)]

for row in range(n):
    s1 = list(input().strip())
    for col in range(m):
        if s1[col] == '2':
            sy,sx = row,col
        board[row].append(int(s1[col]))


def bfs(sy,sx):
    queue = deque()
    queue.append((sy,sx,0))
    visited = [[0 for _ in range(m)] for _ in range(n)]
    visited[sy][sx] = 1
    dy = [0,1,0,-1]
    dx = [1,0,-1,0]
    while queue:
        y,x,cnt = queue.popleft()
        for i in range(4):
            ny = y+dy[i]
            nx = x+dx[i]
            if -1 < ny < n and -1 < nx < m and not visited[ny][nx]:
                if board[ny][nx] > 2:
                    print("TAK")
                    print(cnt+1)
                    exit()
                elif board[ny][nx] == 0:
                    queue.append((ny,nx,cnt+1))
                    visited[ny][nx] = 1
    print("NIE")
bfs(sy,sx)

시간복잡도

  • 단순 BFS를 사용하는 문제이다. 인접행렬을 사용했으므로 시간복잡도는 $O(N*M)$이다.
  • $N = 3000$, $M = 3000$일 때 최악이므로 약 $O(9*10^6)$의 시간이 걸린다.
반응형

'알고리즘' 카테고리의 다른 글

[파이썬/python] 백준 2785- 체인  (0) 2024.09.07
[파이썬/python] 백준 14627- 파닭파닭  (0) 2024.09.07
[파이썬/python] 백준 11578 - 팀원 모집  (0) 2024.09.07
[파이썬/python] 백준 16493 - 최대 페이지 수  (0) 2024.09.07
[파이썬/python] 백준 28215 - 대피소  (0) 2024.09.07
'알고리즘' 카테고리의 다른 글
  • [파이썬/python] 백준 2785- 체인
  • [파이썬/python] 백준 14627- 파닭파닭
  • [파이썬/python] 백준 11578 - 팀원 모집
  • [파이썬/python] 백준 16493 - 최대 페이지 수
개골개굴
개골개굴
굶고 코딩하기
  • 개골개굴
    밥스토리
    개골개굴
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (144)
      • 알고리즘 (124)
      • Java (2)
      • 자기개발 (18)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Redis
    java
    컴퓨터구조
    async
    컴퓨터 구조
    백준
    알고리즘
    python
    인프런
    작심삼일 챌린지
    파이썬
    completablefuture
    OS
    SMTP
    springboot
  • 최근 댓글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
개골개굴
[파이썬/python] 백준 17129 - 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유
상단으로

티스토리툴바