https://www.acmicpc.net/problem/9205
9205번: 맥주 마시면서 걸어가기
송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다.
www.acmicpc.net
from collections import deque
import sys
input = sys.stdin.readline
def bfs():
q=deque([(h_i,h_j)])
while q:
i, j = q.popleft() # 현재위치
if abs(f_i-i) + abs(f_j-j) <= 1000: # 현재위치에서 페스티벌까지 거리
return 'happy'
else:
for p in range(n):
if abs(p_lst[p][0]-i) + abs(p_lst[p][1]-j) <= 1000 and visited[p]==0:
q.append((p_lst[p][0],p_lst[p][1]))
visited[p] = 1
return 'sad'
T = int(input())
for _ in range(T):
n = int(input()) # 편의점 개수
h_i, h_j = map(int,input().split()) # 집 좌표
p_lst = [] # 편의점 리스트
for _ in range(n): # 편의점들 좌표 받기
p_i, p_j = map(int,input().split())
p_lst.append((p_i,p_j))
f_i, f_j = map(int,input().split()) # 페스티벌 좌표
visited = [0]*(n+1)
print(bfs())
아래는 bfs 안 쓴 맨 처음 코드인데 왜 틀렸는지 모르겠음...ㅜ
닿는 편의점마다 다 들러서 맥주 풀충전(1000)하고 현재좌표 계속 편의점위치로 갱신하는 코드였는데...
T = int(input())
for _ in range(T):
n = int(input()) # 편의점 개수
h_i, h_j = map(int,input().split()) # 집 좌표
p_lst = [] # 편의점 리스트
for _ in range(n): # 편의점들 좌표 받기
p_i, p_j = map(int,input().split())
p_lst.append((p_i,p_j))
p_lst.sort()
f_i, f_j = map(int,input().split()) # 페스티벌 좌표
'''
다음 편의점이 1000m 이내에 있는가?
'''
now_i, now_j = h_i, h_j # 현재 위치(집에서 시작)
for p in p_lst:
if abs(p[0]-now_i) + abs(p[1]-now_j) <= 1000:
now_i,now_j = p[0],p[1] # 편의점 들릴 수 있으면 들려서 맥주 풀 충전
else:
print('sad')
exit()
if abs(f_i-now_i) + abs(f_j-now_j) <= 1000:
print('happy')
else:
print('sad')
'백준' 카테고리의 다른 글
백준 2195. 문자열 복사 (0) | 2023.10.10 |
---|---|
백준 14503. 로봇 청소기 (0) | 2023.09.22 |
백준 2573. 빙산 (0) | 2023.09.20 |
백준 2468. 안전 영역 (0) | 2023.09.20 |
백준 1182. 부분수열의 합 (0) | 2023.09.18 |