(백준 5547 일루미네이션
문제 설명
- BFS로 해결할 수 있는 문제이지만, 일반적인 사각형이 아니라 육각형 구조라서 고려해야할 부분이 있다.
- 또한, 모서리의 총 길이를 구해야 하는데, 각각의 6각형과 다른 6각형들의 위치에 따라 잘 처리해야 한다.
문제 풀이
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
- 비어 있는 공간일 때 주변에 건물이 있는지 확인하는 함수