[16930] 달리기 (BFS)

2023. 6. 15. 00:35·Coding Test/Graph
728x90
 

16930번: 달리기

진영이는 다이어트를 위해 N×M 크기의 체육관을 달리려고 한다. 체육관은 1×1 크기의 칸으로 나누어져 있고, 칸은 빈 칸 또는 벽이다. x행 y열에 있는 칸은 (x, y)로 나타낸다. 매 초마다 진영이는

www.acmicpc.net

 

분석

  • 6087 레이저 통신 문제와 유사
  • 시간 초과 시 조건 추가 새 경로의 값이 -1이 아닌 현재 경로보다 작은 경우 break

 

풀이

""""
매 초마다 진영이는 위, 아래, 오른쪽, 왼쪽 중에서 이동할 방향을 하나 고르고, 그 방향으로 최소 1개, 최대 K개의 빈 칸을 이동한다.
시작점 (x1, y1)과 도착점 (x2, y2)가 주어졌을 때, 시작점에서 도착점으로 이동하는 최소 시간
체육관의 크기 N과 M, 1초에 이동할 수 있는 칸의 최대 개수 K
N개의 줄에는 체육관의 상태가 주어진다. 체육관의 각 칸은 빈 칸 또는 벽이고, 빈 칸은 '.', 벽은 '#'으로 주어진다.
마지막 줄에는 네 정수 x1, y1, x2, y2가 주어진다. 두 칸은 서로 다른 칸이고, 항상 빈 칸이다.
(x1, y1)에서 (x2, y2)로 이동하는 최소 시간을 출력한다. 이동할 수 없는 경우에는 -1을 출력한다.
"""
from collections import deque
dx = [0,0,1,-1]
dy = [1,-1,0,0]
n,m,k=map(int, input().split())
a=[input() for _ in range(n)]
x1,y1,x2,y2=map(int, input().split())

dist = [[-1] * (m) for _ in range(n)]
dist[x1-1][y1-1] = 0
q = deque([(x1-1,y1-1)])

while q:
    x,y = q.popleft()
    for d in range(4):
        nx=x+dx[d]
        ny=y+dy[d]
        cnt=1
        while cnt<=k and 0<=nx<n and 0<=ny<m and a[nx][ny]!='#':
            if -1 != dist[nx][ny] <= dist[x][y]:  break # 시간초과 시 추가
            if dist[nx][ny]==-1:
                q.append((nx,ny))
                dist[nx][ny]=dist[x][y]+1
            nx+=dx[d]
            ny+=dy[d]
            cnt+=1


# for i in range(n):
#     for j in range(m):
#         print(dist[i][j], end="  ")
#     print()

print(dist[x2-1][y2-1])

 

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'Coding Test/Graph' 카테고리의 다른 글
  • [6087] 레이저 통신 (BFS)
  • [14221] 편의점 (다익스트라)
  • 봉우리 (네방향 탐색, 이중 for 문, all 함수)
  • 위상정렬(그래프 정렬)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (460)
      • AI (0)
      • Infra (13)
        • Architecture (2)
        • Kubernetes (5)
        • Docker (3)
        • Cloud (1)
        • DevOps (1)
        • Monitoring (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Spring (19)
      • JPA (4)
      • Language (9)
        • Kotlin (1)
        • Java (8)
      • Git (4)
      • DB (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    LIS
    동적계획법
    재귀
    트리
    최대공약수
    Algorithm
    구현
    플로이드워셜
    그리디
    최단거리
    이분탐색
    스택
    구간합
    월간코드챌린지
    다익스트라
    최소신장트리
    조합
    BFS
    백준
    DFS
    프로그래머스
    알고리즘
    큐
    덱
    DP
    그래프
    힙
    정렬
    파이썬
    자료구조
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[16930] 달리기 (BFS)
상단으로

티스토리툴바