(백준 5547 일루미네이션

Link copied to clipboard

문제 설명

Link copied to clipboard
  • BFS로 해결할 수 있는 문제이지만, 일반적인 사각형이 아니라 육각형 구조라서 고려해야할 부분이 있다.
  • 또한, 모서리의 총 길이를 구해야 하는데, 각각의 6각형과 다른 6각형들의 위치에 따라 잘 처리해야 한다.

문제 풀이

Link copied to clipboard
delta = [
    [(-1, 0), (0, 1), (1, 0), (1, -1), (0, -1), (-1, -1)],
    [(-1, 1), (0, 1), (1, 1), (1, 0), (0, -1), (-1, 0)],
]
  • 우선 육각형 탐색은 다음과 같이 설정했다.
    • 두 개의 리스르토 구성한 것은 위치에 따라 탐색 방식이 조금씩 달라질 수 있기 때문이다.
walls = (
    [[0] * (W + 2)] + [[0] + list(MIIS()) + [0] for _ in range(H)] + [[0] * (W + 2)]
)
  • 탐색은 0으로 패딩을 하고, 건물이 아닌 부분을 탐색하며 건물과 만나는 부분만큼 벽의 개수를 더하였다.
def count_walls(x: int, y: int) -> int:
    global walls, delta
    count = 0
    for dx, dy in delta[x % 2]:
        nx, ny = x + dx, y + dy
        if 0 <= nx <= H + 1 and 0 <= ny <= W + 1:
            if walls[nx][ny]:
                count += 1
    return count
  • 비어 있는 공간일 때 주변에 건물이 있는지 확인하는 함수