본문 바로가기

Algorithm/BOJ

[BOJ] 9205. 맥주 마시면서 걸어가기

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

 

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

송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다.

www.acmicpc.net

 

 

1. 해결방법

맥주가 20병 있다고 한다.

50미터 이동할 때마다 맥주 한병씩은 꼭 마셔야 하는데, 여기서 맥주의 개수를 카운트 하기 보다는 
맥주를 못마시게 될 경우와 맥주를 마시면서 페스티벌에 도착하는 경우만 생각하면 되기 때문에
맥주 50미터당 맥주 20병을 다 마실 수 있는 거리인 1000미터를 기준으로 해결해야 한다.

1000미터가 키 포인트 이다.

집에서 편의점까지의 거리를 구한 다음 1000미터가 이하라면 q에 삽입하는 것을 반복하고 현재 위치를 갱신해서
페스티벌에 도착하는 거리를 계산하면 된다.

 

 

2. 정답코드

import sys
from collections import deque

input = sys.stdin.readline


def bfs():
    q = deque()
    q.append((home[0], home[1]))

    while q:
        x, y = q.popleft()
        if abs(x - fest[0]) + abs(y - fest[1]) <= 1000:
            return "happy"

        for i in range(n):
            if chk[i] == False:
                if abs(x - store[i][0]) + abs(y - store[i][1]) <= 1000:
                    chk[i] = True
                    q.append((store[i][0], store[i][1]))
    return "sad"


T = int(input())

for t in range(T):
    n = int(input())
    home = list(map(int, input().split()))
    store = []
    for _ in range(n):
        store.append(list(map(int, input().split())))

    fest = list(map(int, input().split()))
    chk = [False] * n

    print(bfs())

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 10026. 적록색약 Python, Java  (1) 2023.01.28
[BOJ] 2573. 빙산  (0) 2023.01.23
[BOJ] 7569. 토마토  (0) 2023.01.19
[BOJ] 16236. 아기 상어  (0) 2022.11.02
[BOJ] 11559. Puyo Puyo  (0) 2022.11.01