본문 바로가기

C언어

2025년 1학기 7주차 C언어

from collections import deque
#사용의 편의성을 위해 deque를 import해준다

def solution(rectangle, characterX, characterY, itemX, itemY):
    MAX = 102  
    #문제에서는 (50,50)의 공간이었지만 이렇게하면 자꾸 오류가 나는 것 같아 2배로 늘려준다. 근데 왜 오류가 나는지 까지는 잘 모르겠다 

    board = [[0] * MAX for _ in range(MAX)]

    # 직사각형들도 2배 해준다
    for x1, y1, x2, y2 in rectangle:
        for x in range(x1*2, x2*2 + 1):
            for y in range(y1*2, y2*2 + 1):
                board[x][y] = 1

    # 내부를 0으로 처리해준다. 외곽선만 남겨둔단 뜻이다
    for x1, y1, x2, y2 in rectangle:
        for x in range(x1*2 + 1, x2*2):
            for y in range(y1*2 + 1, y2*2):
                board[x][y] = 0

    # BFS 준비
    visited = [[False] * MAX for _ in range(MAX)]
    q = deque()
    q.append((characterX*2, characterY*2, 0))
    visited[characterX*2][characterY*2] = True
    
    #visited 이 부분까지가 초기 설정이다

    dx = [0, 0, 1, -1]
    dy = [1, -1, 0, 0]

    while q:
        x, y, dist = q.popleft()

        if x == itemX*2 and y == itemY*2:
            return dist // 2  # 2배 했으니 return 할 때 나눠준다

        for i in range(4): #거리를 탐색한다
            nx, ny = x + dx[i], y + dy[i]

            if 0 <= nx < MAX and 0 <= ny < MAX: #일단 MAX안에 있는지 확인
                if board[nx][ny] == 1 and not visited[nx][ny]: #외곽선에 있는지도 확인한다
                    visited[nx][ny] = True
                    q.append((nx, ny, dist + 1))

    return -1

'C언어' 카테고리의 다른 글

2025년 여름학기 1주차 C언어  (0) 2025.06.29
2025년 1학기 8주차 C언어  (0) 2025.05.25
2025학년 1학기 6주차 C언어  (0) 2025.05.10
2025년 C언어 5주차 추가  (0) 2025.05.01
2025년 1학기 C언어 5주차  (0) 2025.04.30