๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[๋ฐฑ์ค€]9205๋ฒˆ: ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ

by syLim___ 2023. 2. 27.
728x90

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

 


  • 50m๋‹น ๋งฅ์ฃผ 1๋ณ‘์ด ์†Œ์ง„๋œ๋‹ค๋Š” ๋ง์€, ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 1000m๊นŒ์ง€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • ์ด๋™ ๊ฒฝ๋กœ:

 ์ง‘ (-> ํŽธ์˜์ 1 -> ํŽธ์˜์ 2 -> .... -> ํŽธ์˜์ n) -> ํŽ˜์Šคํ‹ฐ๋ฒŒ

 

  • ๊ฐ๊ฐ์˜ ์ด๋™ ๊ฑฐ๋ฆฌ๊ฐ€ 1000๋ณด๋‹ค ํฌ์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋„์ฐฉ์ง€๊นŒ์ง€ ๋„๋‹ฌํ•˜๊ฒŒ ๋˜๋ฉด happy๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

import sys
from collections import deque
input = sys.stdin.readline

def dist(x1, y1, x2, y2):
  return abs(x1-x2) + abs(y1-y2)

def bfs(x,y):
  q = deque()
  q.append((x,y))
  visited=[] #๋ฐฉ๋ฌธํ•œ ํŽธ์˜์  ์ขŒํ‘œ๋ฅผ ์ €์žฅ
  while q:
    a,b=q.popleft()
    #์ด๋™๊ฑฐ๋ฆฌ 1000์ดํ•˜๋กœ๋„์ฐฉ์ ์— ๋„๋‹ฌํ•˜๋ฉด True๋ฅผ ์ถœ๋ ฅ
    if dist(a,b,endX,endY) <= 1000: 
      return True
    #ํŽธ์˜์ ๋“ค ์ค‘ ๋“ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์žˆ๋Š”์ง€ ์ฒดํฌ
    for i in range(n):
      storeX, storeY = store[i]
      #๋ฐฉ๋ฌธํ•œ ์  ์—†๊ณ  ๊ฑฐ๋ฆฌ 1000์ดํ•˜๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํŽธ์˜์ ์„ ์ฐพ์œผ๋ฉด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ›„ ํ์— ๋„ฃ๋Š”๋‹ค
      if (storeX, storeY) not in visited:
        if dist(a,b,storeX,storeY) <= 1000:
          visited.append((storeX, storeY))
          q.append((storeX,storeY))
  return False

  
t=int(input())

for _ in range(t):
  n = int(input())
  startX, startY = map(int, input().split())
  store=[]
  for i in range(n):
    x,y = map(int,input().split())
    store.append((x,y))
  endX, endY = map(int, input().split())

  if bfs(startX, startY)==True:
    print('happy')
  else:
    print('sad')

์–ด๋ ค์›ก

728x90