[PS] BOJ 29721 / 변형 체스 놀이 : 다바바(Dabbaba)

[PS] BOJ 29721 / 변형 체스 놀이 : 다바바(Dabbaba)
문제 링크: https://www.acmicpc.net/problem/29721
Thumbnail: Photo by Daniel Stiel (Unsplash)

맵을 활용하는 문제였습니다.

풀이

체스판 전체를 배열로 관리하려고 하기보단 Map 자료구조를 활용해 방문한/이미 기물이 위치한 위치를 저장하는 편이 유리합니다.

먼저 모든 기물의 위치를 저장한 뒤, 각 기물의 위치에서 이동 가능한 모든 위치에 대해 해당 위치에 다른 기물이 있거나 이미 방문하지 않았는지 확인하면 됩니다.

전체 코드

input = open(0).readline
N, K = map(int, input().split())

visited = {}
dabbabas = []

for i in range(K):
    x, y = map(lambda n: int(n) - 1, input().split())
    visited[(x, y)] = True
    dabbabas.append((x, y))

cnt = 0
for x, y in dabbabas:
    for dx, dy in ((2, 0), (0, 2), (0, -2), (-2, 0)):
        nx = x + dx
        ny = y + dy
        if 0 <= nx < N and 0 <= ny < N and not visited.get((nx, ny), False):
            cnt += 1
            visited[(nx, ny)] = True

print(cnt)

solution.py