백준 #6127 Super Paintball
문제 링크
문제 설명
$NxN$ 격자판이 있고 $K$개의 주어진 지점에서 8방향으로 총을 일직선으로 쭉 쏠 수 있을 때 주어진 지점에서 동시에 통과할 수 있는 곳의 개수를 찾는 문제
코드
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)
풀이
각 지점에서 8방향으로 이동하면서 방문 지점에 1을 더해주었다. 값이 $K$인 원소의 개수를 세어주면 끝!
댓글남기기