:link:문제 링크

[6127 Super Paintball]

:question:문제 설명

$NxN$ 격자판이 있고 $K$개의 주어진 지점에서 8방향으로 총을 일직선으로 쭉 쏠 수 있을 때 주어진 지점에서 동시에 통과할 수 있는 곳의 개수를 찾는 문제

:pencil2:코드

import sys
input = sys.stdin.readline


N, K = map(int, input().split())
arr = [[0] * N for _ in range(N)]
dr = [-1, -1, 0, 1, 1, 1, 0, -1]
dc = [0, 1, 1, 1, 0, -1, -1, -1]
for _ in range(K):
    r, c = map(int, input().split())
    r -= 1
    c -= 1
    arr[r][c] += 1
    for k in range(8):
        for i in range(1, N):
            nr, nc = r + i * dr[k], c + i * dc[k]
            if nr < 0 or nr >= N or nc < 0 or nc >= N:
                break
            arr[nr][nc] += 1

cnt = 0
for i in range(N):
    for j in range(N):
        if arr[i][j] == K:
            cnt += 1
print(cnt)

:memo:풀이

각 지점에서 8방향으로 이동하면서 방문 지점에 1을 더해주었다. 값이 $K$인 원소의 개수를 세어주면 끝!

댓글남기기