chldkato

백준 9205 맥주 마시면서 걸어가기 (파이썬) 본문

백준

백준 9205 맥주 마시면서 걸어가기 (파이썬)

chldkato 2020. 2. 18. 15:06

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

 

9205번: 맥주 마시면서 걸어가기

문제 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. 맥주 한 박스에는 맥주가 20개 들어있다. 목이 마르면 안되기 때문에 50미터에 한 병씩 마시려고 한다. 상근이의 집에서 페스티벌이 열리는 곳은 매우 먼 거리이다. 따라서, 맥주를 더 구매해야 할 수도 있다. 미리 인터넷으로 조사를 해보니 다행히도 맥주를 파는 편의

www.acmicpc.net

1. 편의점과 도착지 좌표를 d에 저장

2. d안의 좌표를 하나씩 불러오면서 현재 위치와의 맨해튼 거리와 맥주양을 비교하여 이동가능한지 검사

3. bfs로 이동하면서 목표에 도착하면 happy 출력 불가능하면 sad 출력 

from collections import deque
import sys

input = sys.stdin.readline

def bfs(x, y):
    q, c = deque(), []
    q.append([x, y, 20])
    c.append([x, y, 20])
    while q:
        x, y, beer = q.popleft()
        if x == x1 and y == y1:
            print("happy")
            return
        for nx, ny in d:
            if [nx, ny, 20] not in c:
                l1 = abs(nx - x) + abs(ny - y)
                if beer*50 >= l1:
                    q.append([nx, ny, 20])
                    c.append([nx, ny, 20])
    print("sad")
    return

tc = int(input())
while tc:
    n = int(input())
    x0, y0 = map(int, input().split())
    d = []
    for _ in range(n):
        x, y = map(int, input().split())
        d.append([x, y])
    x1, y1 = map(int, input().split())
    d.append([x1, y1])
    bfs(x0, y0)
    tc -= 1

'백준' 카테고리의 다른 글

백준 1726 로봇 (파이썬)  (0) 2020.02.18
백준 3184 양 (파이썬)  (0) 2020.02.18
백준 10159 저울 (파이썬)  (0) 2020.02.18
백준 2458 키 순서 (파이썬)  (1) 2020.02.18
백준 6593 상범 빌딩 (파이썬)  (2) 2020.02.18
Comments