๐Ÿ“š Study/Baekjoon

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv3 | dfs/bfs | ์•„์ดํ…œ ์ค๊ธฐ

์œฐ๊ฐฑ 2026. 4. 1. 21:43

https://school.programmers.co.kr/learn/courses/30/lessons/87694

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

 

์ง์‚ฌ๊ฐํ˜•์ด 1๊ฐœ์ผ ๋•Œ๋Š” ์–ด๋ ต์ง€ ์•Š๊ฒŒ ๊ตฌ์‚ฌํ–ˆ๋Š”๋ฐ

์ผ๋‹จ ์ขŒํ‘œ์ถ•์„ 2๋ฐฐ๋กœ ๋Š˜๋ฆด ์ƒ๊ฐ์„ ๋ชปํ–ˆ๊ณ ....

ํ•œ ์นธ์งœ๋ฆฌ ์• ๋งคํ•œ ์ ‘์ด‰์ด ๋‘ ์นธ ์ด์ƒ์˜ ๊ตฌ์กฐ๋กœ ํŽด์ง€๋ฉด์„œ
๊ฒฝ๊ณ„/๋‚ด๋ถ€/๋ฐ”๊นฅ์ด ๋ถ„๋ช…ํ•˜๊ฒŒ ๋‚˜๋‰จ
-> ๋„ˆ๋ฌด ์กฐ๋ฐ€ํ•ด์„œ ๊ตฌ๋ถ„์ด ์•ˆ ๋˜๋˜ ๊ฑธ ์กฐ๊ธˆ ํ™•๋Œ€ํ•ด์„œ ๊ธฐํ•˜ ๊ตฌ์กฐ ๋ณด์กด

๊ธธ์„ ํ‘œ์‹œํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค ์ƒ๊ฐ์€ ํ–ˆ๋Š”๋ฐ ์ขŒํ‘œ์ถ• ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ์•ˆ๋์Œ..

๋Œ€์ถฉ ๋จธ๋ฆฌ์†์—๋Š” ์žˆ์—ˆ์ง€๋งŒ ๋„ˆ๋ฌด ์–ด๋ ค์› ์Œ ํ‘..

bfs ๊ตฌํ˜„์€ ์–ด๋ ต์ง€ ์•Š์•˜๋Š”๋ฐ rectangle_map ๊ตฌํ•˜๋Š”๊ฒŒ hell

 

from collections import deque
def bfs(rectangle, rectangle_map, characterX, characterY, itemX, itemY):
    queue = deque([(characterX, characterY, 0)])
    rectangle_map[characterX][characterY] = 2
    
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    
    while queue:
        x, y, cnt = queue.popleft()
        if x == itemX and y == itemY:
            return cnt
        
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            if 0 <= nx < 102 and 0 <= ny < 102:
                if rectangle_map[nx][ny] == 1:
                    queue.append((nx, ny, cnt+1))
                    rectangle_map[nx][ny] = 2

        
def solution(rectangle, characterX, characterY, itemX, itemY):
    # ํ…Œ๋‘๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•„์„œ 2๋ฐฐ๋กœ ์ขŒํ‘œ ํ™•์žฅํ•œ ๋‹ค์Œ ๋‚˜์ค‘์— 1/2 ๊ณฑํ•ด์„œ ์ค„์ด๊ธฐ
    # rectangle_map์„ ํ†ตํ•ด์„œ ํ…Œ๋‘๋ฆฌ ์ •์˜ํ•˜๊ธฐ
    
    rectangle_map = [[0]*51*2 for _ in range(51*2)]
    
    characterX = 2*characterX
    characterY = 2*characterY
    itemX = 2*itemX
    itemY = 2*itemY
    
    # ์ง์‚ฌ๊ฐํ˜• ์ƒ‰์น ํ•˜๊ธฐ
    for rec in rectangle:
        x1, y1, x2, y2 = rec
        x1, y1, x2, y2 = 2*x1, 2*y1, 2*x2, 2*y2
        for i in range(x1, x2+1):
            for j in range(y1, y2+1):
                rectangle_map[i][j] = 1
    
    # ๋‚ด๋ถ€ ์ง€์šฐ๊ธฐ
    for rec in rectangle:
        x1, y1, x2, y2 = rec
        x1, y1, x2, y2 = 2*x1, 2*y1, 2*x2, 2*y2
        for i in range(x1+1, x2):
            for j in range(y1+1, y2):
                rectangle_map[i][j] = 0 
    
    answer = bfs(rectangle, rectangle_map, characterX, characterY, itemX, itemY)
    
    return answer//2