SS 텔레콤에서 현재 기지국의 위치와 집들이 표시된 지도를 2차원 nxn 배열로 변환하여, 기지국에 커버 되지 않는 집의 수를 찾고자 한다.
기지국은 [그림1]과 같이 세가지 종류가 있다. 각각의 기지국은 기지국이 위치한 셀에서 동서남북으로 각 1개, 2개, 3개의 셀을 커버하며, 하나의 집은 1개의 셀에 있다.

주어진 2차원 배열 지도에 위치한 기지국으로 커버되지 않는 집의 수를 찾는 프로그램을 작성하시오.
[제약사항]
2차원 배열의 크기의 n은 50이하이다. 기지국의 수는 50이하이다.
[입력]
첫 줄에는 테스트 케이스의 수가 주어지고, 그 다음 줄부터 각 테스트 케이스가 n개의 줄로 구성된다. 테스트 케이스의 첫 줄에는 n이 주어지고, 다음 n개 줄에는 2차원 배열의 각 행이 한 줄에 차례로 주어진다. 단, 집이 위치한 원소는 ‘H’, 기지국이 위치한 원소는 ‘A’, ‘B’, ‘C’로 표시하며, 각각 동서남북으로 1, 2, 3개를 커버하는 기지국이다. ‘X’인 원소는 아무 것도 없다는 것을 나타낸다.
[출력]
각 줄은 ‘#x’로 시작하고 공백을 하나 둔 다음, 테스트 케이스에 주어진 기지국에 cover가 되지 않는 집의 수를 출력한다. 단, x는 테스트 케이스 번호이다.
입력
2
9
XXXXXXXXX
XXXHXXXXX
XXHAHXXHX
XXHHXXXXX
XXXXXXXXX
XXAHHXXXX
XXHXXHAHX
XXAHXXHXX
XXHXHXXXX
9
XXXHXXXXX
XXXHXXXXX
XXHCHXHHX
XXHHXXHXX
XXXHXHBHH
XHAHHXXXX
XXHXXXHXX
XXAHXHAHX
XXHXHXXXX
XXXXXXXXX
XXXHXXXXX
XXHAHXXHX
XXHHXXXXX
XXXXXXXXX
XXAHHXXXX
XXHXXHAHX
XXAHXXHXX
XXHXHXXXX
9
XXXHXXXXX
XXXHXXXXX
XXHCHXHHX
XXHHXXHXX
XXXHXHBHH
XHAHHXXXX
XXHXXXHXX
XXAHXHAHX
XXHXHXXXX
출력
#1 4
#2 4
#2 4
T = int(input())
for tc in range(1,T+1):
n = int(input())
arr = [list(input()) for _ in range(n)]
cnt = 0
for i in range(n):
for j in range(n):
if arr[i][j] == 'A':
for di, dj in [(1,0), (0,1), (-1,0), (0,-1)]:
if 0<= i+di < n and 0<= j+dj < n:
if arr[i+di][j+dj] == 'H': # 범위 내 집이 있으면
arr[i+di][j+dj] = 'X' # X로 변경
for i in range(n):
for j in range(n):
if arr[i][j] == 'B':
for k in range(1,3):
for di, dj in [(1,0), (0,1), (-1,0), (0,-1)]:
if 0<= i+di*k < n and 0<= j+dj*k < n:
if arr[i+di*k][j+dj*k] == 'H':
arr[i+di*k][j+dj*k] = 'X'
for i in range(n):
for j in range(n):
if arr[i][j] == 'C':
for k in range(1,4):
for di, dj in [(1,0), (0,1), (-1,0), (0,-1)]:
if 0<= i+di*k < n and 0<= j+dj*k < n:
if arr[i+di*k][j+dj*k] == 'H':
arr[i+di*k][j+dj*k] = 'X'
for i in range(n):
for j in range(n):
if arr[i][j] == 'H': # 범위를 벗어나 X로 바뀌지 못한 집이 있으면
cnt += 1
print(f'#{tc} {cnt}')
'swea' 카테고리의 다른 글
9367. 점점 커지는 당근의 개수 (0) | 2023.08.28 |
---|---|
11315. 오목 판정 (0) | 2023.08.28 |
13732. 정사각형 판정 (0) | 2023.08.28 |
18575. 풍선팡 보너스 게임 (0) | 2023.08.28 |
1873. 상호의 배틀필드 (0) | 2023.08.27 |