해답)
from collections import deque
import sys
def input():
return sys.stdin.readline().rstrip()
def calDisatance(p1, p2): # 거리 계산 함수
x1, y1 = p1
x2, y2 = p2
return abs(x1-x2) + abs(y1-y2)
t = int(input())
for _ in range(t): # 테스트 케이스만큼 반복
CUs = [] # 편의점들
# 입력받기
n = int(input())
home_x, home_y = map(int, input().split())
home = (home_x, home_y)
for _ in range(n):
CU_x, CU_y = map(int, input().split())
CUs.append((CU_x, CU_y))
dest_x, dest_y = map(int, input().split())
dest = (dest_x, dest_y)
'''
BFS 로 도착 가능한지 탐색
현재 도착 가능하면 result 를 'happy' 로 바꾸고 루프탈출
도착 불가능하다면, 갈 수 있는 편의점을 찾아서 큐에 넣는다.
'''
visited = [False for _ in range(len(CUs))]
result = "sad"
q = deque([home])
while q:
now = q.popleft()
if calDisatance(now, dest) <= 1000:
result = "happy"
break
for i in range(len(CUs)):
if visited[i] or calDisatance(now, CUs[i]) > 1000:
continue
q.append(CUs[i])
visited[i] = True
# 결과 출력
print(result)
풀이)
테스트 케이스 t 가 최대 50 밖에 안되고, 편의점 개수 n 도 최대 100 이내이므로
시간 복잡도 신경을 크게 안써도 된다!
=> BFS 를 이용해서 현재 들릴 수 있는 곳들을 가면서, 목적지에 도착가능하면 Break 하도록 짰다.
- 플로이드-워셜 이나 다른 방법을 써도 풀릴 것 같다 ! 😉
* 추가적인 설명은 코드내에 주석으로
* 위 문제의 저작권은 백준(https://www.acmicpc.net/) 에 있습니다.
728x90
'문제풀이 > 백준' 카테고리의 다른 글
[백준✨] 12849번 <본대 산책> / Python 문제풀이 / (0) | 2020.11.22 |
---|---|
[백준✨] 11779번 <최소비용 구하기2> / Python 문제풀이 / 다익스트라 (0) | 2020.11.10 |
[백준✨] 1992번 <쿼드트리> / Python 문제풀이 / (0) | 2020.10.27 |
[백준✨] 1780번 <종이의 개수> / Python 문제풀이 (0) | 2020.10.02 |
[백준✨] 10825번 <국영수> / Python 문제풀이 (0) | 2020.09.22 |
댓글