๐ญ ๋ฌธ์ ์ดํด
๋งจํดํผ ๊ฑฐ๋ฆฌ๋ก ๊ณ์ฐํด์ 1000๋ฏธํฐ ์ด๋ด์ ํธ์์ ์ด ์๋ค๋ฉด ๋งฅ์ฃผ๋ฅผ 20๋ณ์ผ๋ก ๊ฐฑ์ ํ ์ ์๋ค.
ํธ์์ ์ขํ ๋๋ ํ์คํฐ๋ฒ ์ขํ๊ฐ ๋ค์ด์๋ ๋ฆฌ์คํธ๋ฅผ ํ์ํด์ 1000๋ฏธํฐ ๋ด์ ์๋ค๋ฉด queue์ ๋ฃ๊ณ ,
๋ง์ผ ๊ทธ ์ขํ๊ฐ ํ์คํฐ๋ฒ ์ขํ๋ผ๋ฉด ๋์ฐฉํ๋ค๋ ๊ฒฐ๊ณผ๋ก "happy"๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.
BFS ์ฐ์ฐ์ ์ํ queue๊ฐ ๋น์ด์ while ๋ฌธ์ด ์ข ๋ฃ๋์๋ค๋ฉด,
๊ฐ์ง ๋งฅ์ฃผ 20๋ณ์ผ๋ก๋ ๋๋ฌํ ์ ์๋ค๋ ๋ป์ผ๋ก "sad"๋ฅผ ์ถ๋ ฅํ๊ฒ ๋๋ค.
๊ตฌํ ์ธ์ด: Python
import sys
from collections import deque
r = sys.stdin.readline
def distance(n_x, n_y, x, y):
return abs(n_x - x) + abs(n_y - y)
def solve(n, songdo):
start_x, start_y = songdo[0] # ์์์ ์ขํ
dest_x, dest_y = songdo[-1] # ๋์ฐฉ์ ์ขํ
store = songdo[1:]
queue = deque()
visited = []
queue.append([start_x, start_y]) # ์์์ ๋ถํฐ ์ถ๊ฐ
while queue:
now_x, now_y = queue.popleft()
for coor_list in store:
if coor_list not in visited:
if distance(now_x, now_y, coor_list[0], coor_list[1]) <= 1000:
# ๊ทธ ์ง์ ์ด ๋์ฐฉ์ ์ด๋ผ๋ฉด happy
if coor_list[0] == dest_x and coor_list[1] == dest_y:
return "happy"
visited.append(coor_list) # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ list์ ์ถ๊ฐ
queue.append(coor_list)
return "sad"
t = int(r()) # ํ
์คํธ ์ผ์ด์ค์ ๊ฐ์
for _ in range(t):
n = int(r()) # ํธ์์ ์ ๊ฐ์
songdo = [list(map(int, r().split())) for _ in range(n + 2)] # ์ขํ ์
๋ ฅ
print(solve(n, songdo))
* ๋๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ๋ฆฌ์คํธ์ ์ง์ด๋ฃ์ด์ ๋งค๋ฒ ์์ ํ์์ ํด์ผํ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐ์๋ ์ง์ฅ์ด ์์ง๋ง, ๋ฐ์ดํฐ ์๊ฐ ๋ ๋์ด๋๋ฉด ํจ์จ์ ์ด์ง ์์ ์๋ ์๋ค.
๋ค๋ฅธ ํ์ด๋ฅผ ์ฐพ์๋ณด๋, ์ขํ๋ฅผ ๋ชจ์๋์ ๋ฆฌ์คํธ์ ์ธ๋ฑ์ค๋ฅผ ๋์ ๋๋ฆฌ์ ์ ์ฅํด์ ํผ ๊ฒ์ ๋ณด์๋ค.
๊ทธ๋ ๊ฒ ๊ตฌํํ๋ค๋ฉด ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ ์ค์ผ ์ ์๋ค!
'Problem_Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 2805 ๋๋ฌด ์๋ฅด๊ธฐ / ์ด๋ถํ์ (0) | 2021.02.09 |
---|---|
[BOJ] ๋ฐฑ์ค 1920 ์ ์ฐพ๊ธฐ / ์ด๋ถํ์ (0) | 2021.02.09 |
[BOJ] ๋ฐฑ์ค 2573 ๋น์ฐ / BFS (0) | 2021.01.14 |
[BOJ] ๋ฐฑ์ค 2468 ์์ ์์ญ / BFS (0) | 2021.01.13 |
[BOJ] ๋ฐฑ์ค 5014 ์คํํธ๋งํฌ / BFS (0) | 2021.01.13 |