[๋ฐฑ์ค€] ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ / 9205๋ฒˆ / ํŒŒ์ด์ฌ / python / BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜
Algorithm/Baekjoon

[๋ฐฑ์ค€] ๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ / 9205๋ฒˆ / ํŒŒ์ด์ฌ / python / BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’กsolutions 

๐Ÿ’ฌ BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

๐Ÿ’ฌ ์ฃผ์–ด์ง„ ์ขŒํ‘œ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ -> ์ƒ๊ทผ์ด๋„ค์ง‘(home_x, home_y)์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.

๐Ÿ’ฌ ํŽธ์˜์  ์ขŒํ‘œ๋ฅผ ๋Œ์•„๊ฐ€๋ฉฐ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•œ๋‹ค -> ๋‘ ๊ฐ€์ง€๋ฅผ ํ™•์ธํ•˜๋Š”๋ฐ โ‘ ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ โ‘ก 20๊ฐœ์˜ ๋งฅ์ฃผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ์ธ์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.

๐Ÿ’ฌ q์—์„œ popleftํ•˜์—ฌ ๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•  ์ขŒํ‘œ๊ฐ€ ๋ฝ ํŽ˜์Šคํ‹ฐ๋ฒŒ ์ขŒํ‘œ(rock_x, rock_y)์ด๋ฉด ํ–‰๋ณตํ•˜๊ฒŒ ํŽ˜์Šคํ‹ฐ๋ฒŒ์— ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 'happy'๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

๐Ÿ‘จ‍๐Ÿ’ปcode 

import sys
from collections import deque

def bfs(x, y):
    q = deque([[x, y]])
    visit = [[x, y]]
    while q:
        x, y = q.popleft()
        if x == rock_x and y == rock_y:
            print('happy')
            return
        for nx, ny in next:
            if [nx, ny] not in visit:
                if abs(nx-x) + abs(ny-y) <= beer*50:
                    q.append([nx, ny])
                    visit.append([nx, ny])
    print('sad')
    return


input = sys.stdin.readline
for i in range(int(input())):
    n = int(input())
    beer = 20
    home_x, home_y = map(int, input().split())
    next = []
    for j in range(n+1):
        x, y = map(int, input().split())
        next.append([x, y])
    rock_x, rock_y = next[-1][0], next[-1][1]
    bfs(home_x, home_y)

 

 

๐Ÿ“Œdescription 

 

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

์†ก๋„์— ์‚ฌ๋Š” ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ์†ก๋„์—์„œ ์—ด๋ฆฌ๋Š” ํŽœํƒ€ํฌํŠธ ๋ฝ ํŽ˜์Šคํ‹ฐ๋ฒŒ์— ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์˜ฌํ•ด๋Š” ๋งฅ์ฃผ๋ฅผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ถœ๋ฐœ์€ ์ƒ๊ทผ์ด๋„ค ์ง‘์—์„œ ํ•˜๊ณ , ๋งฅ์ฃผ ํ•œ ๋ฐ•์Šค๋ฅผ ๋“ค๊ณ  ์ถœ๋ฐœํ•œ๋‹ค.

www.acmicpc.net


๋ฌธ์ œ

์†ก๋„์— ์‚ฌ๋Š” ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ์†ก๋„์—์„œ ์—ด๋ฆฌ๋Š” ํŽœํƒ€ํฌํŠธ ๋ฝ ํŽ˜์Šคํ‹ฐ๋ฒŒ์— ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์˜ฌํ•ด๋Š” ๋งฅ์ฃผ๋ฅผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ถœ๋ฐœ์€ ์ƒ๊ทผ์ด๋„ค ์ง‘์—์„œ ํ•˜๊ณ , ๋งฅ์ฃผ ํ•œ ๋ฐ•์Šค๋ฅผ ๋“ค๊ณ  ์ถœ๋ฐœํ•œ๋‹ค. ๋งฅ์ฃผ ํ•œ ๋ฐ•์Šค์—๋Š” ๋งฅ์ฃผ๊ฐ€ 20๊ฐœ ๋“ค์–ด์žˆ๋‹ค. ๋ชฉ์ด ๋งˆ๋ฅด๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— 50๋ฏธํ„ฐ์— ํ•œ ๋ณ‘์”ฉ ๋งˆ์‹œ๋ ค๊ณ  ํ•œ๋‹ค. ์ฆ‰, 50๋ฏธํ„ฐ๋ฅผ ๊ฐ€๋ ค๋ฉด ๊ทธ ์ง์ „์— ๋งฅ์ฃผ ํ•œ ๋ณ‘์„ ๋งˆ์…”์•ผ ํ•œ๋‹ค.

์ƒ๊ทผ์ด์˜ ์ง‘์—์„œ ํŽ˜์Šคํ‹ฐ๋ฒŒ์ด ์—ด๋ฆฌ๋Š” ๊ณณ์€ ๋งค์šฐ ๋จผ ๊ฑฐ๋ฆฌ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๋งฅ์ฃผ๋ฅผ ๋” ๊ตฌ๋งคํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฏธ๋ฆฌ ์ธํ„ฐ๋„ท์œผ๋กœ ์กฐ์‚ฌ๋ฅผ ํ•ด๋ณด๋‹ˆ ๋‹คํ–‰ํžˆ๋„ ๋งฅ์ฃผ๋ฅผ ํŒŒ๋Š” ํŽธ์˜์ ์ด ์žˆ๋‹ค. ํŽธ์˜์ ์— ๋“ค๋ ธ์„ ๋•Œ, ๋นˆ ๋ณ‘์€ ๋ฒ„๋ฆฌ๊ณ  ์ƒˆ ๋งฅ์ฃผ ๋ณ‘์„ ์‚ด ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐ•์Šค์— ๋“ค์–ด์žˆ๋Š” ๋งฅ์ฃผ๋Š” 20๋ณ‘์„ ๋„˜์„ ์ˆ˜ ์—†๋‹ค. ํŽธ์˜์ ์„ ๋‚˜์„  ์งํ›„์—๋„ 50๋ฏธํ„ฐ๋ฅผ ๊ฐ€๊ธฐ ์ „์— ๋งฅ์ฃผ ํ•œ ๋ณ‘์„ ๋งˆ์…”์•ผ ํ•œ๋‹ค.

ํŽธ์˜์ , ์ƒ๊ทผ์ด๋„ค ์ง‘, ํŽœํƒ€ํฌํŠธ ๋ฝ ํŽ˜์Šคํ‹ฐ๋ฒŒ์˜ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์ด ํ–‰๋ณตํ•˜๊ฒŒ ํŽ˜์Šคํ‹ฐ๋ฒŒ์— ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ t๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (t ≤ 50)

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ๋งฅ์ฃผ๋ฅผ ํŒŒ๋Š” ํŽธ์˜์ ์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. (0 ≤ n ≤ 100).

๋‹ค์Œ n+2๊ฐœ ์ค„์—๋Š” ์ƒ๊ทผ์ด๋„ค ์ง‘, ํŽธ์˜์ , ํŽœํƒ€ํฌํŠธ ๋ฝ ํŽ˜์Šคํ‹ฐ๋ฒŒ ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ขŒํ‘œ๋Š” ๋‘ ์ •์ˆ˜ x์™€ y๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. (๋‘ ๊ฐ’ ๋ชจ๋‘ ๋ฏธํ„ฐ, -32768 ≤ x, y ≤ 32767)

์†ก๋„๋Š” ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์œผ๋กœ ์ƒ๊ธด ๋„์‹œ์ด๋‹ค. ๋‘ ์ขŒํ‘œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” x ์ขŒํ‘œ์˜ ์ฐจ์ด + y ์ขŒํ‘œ์˜ ์ฐจ์ด ์ด๋‹ค. (๋งจํ•ดํŠผ ๊ฑฐ๋ฆฌ)

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์ด ํ–‰๋ณตํ•˜๊ฒŒ ํŽ˜์Šคํ‹ฐ๋ฒŒ์— ๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉด "happy", ์ค‘๊ฐ„์— ๋งฅ์ฃผ๊ฐ€ ๋ฐ”๋‹ฅ๋‚˜์„œ ๋” ์ด๋™ํ•  ์ˆ˜ ์—†์œผ๋ฉด "sad"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 




๋ฐ˜์‘ํ˜•