N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
total_kills = 0
#상하좌우 및 대각선 8방향
dy = [-1, -1, -1, 0, 0, 1, 1, 1]
dx = [-1, 0, 1, -1, 1, -1, 0, 1]
for i in range(N):
for j in range(N):
if arr[i][j]==1: #사냥꾼이면은
hunt(i, j)
print(f'#{tc} {total_kills}')
2차원 배열을 돌면서 사냥꾼을 자주치면,
hunt라는 함수를 실행한다.
그리고 hunt에서는
사냥꾼이 쏠 수 있는 방향은 위, 아래, 좌, 우, 대각선 위, 아래, 좌, 우 해서 8가지 방향이다.
이렇게 쏘면서 돌이나 벽을 만나면 stop,
토끼를 만나면 cnt +=1 하고 계속 하기
def hunt(y, x):
global total_kills
for i in range(8): #먼저 쏠 방향 정하고
j = 1
while True: #일직선으로 끝까지 쏘기
ny = y+dy[i]*j
nx = x+dx[i]*j
if ny<0 or nx<0 or ny>N-1 or nx>N-1 or arr[ny][nx]==3:
#범위 벗어나거나 벽 만나면
break
if arr[ny][nx]==0:
#빈공간이면은 계속 쏘기
j+=1
if arr[ny][nx]==2:
#토끼 만나면 죽이고 계속 쏘기
total_kills +=1
j += 1
전체 코드)
T = int(input())
for tc in range(1, T+1):
def hunt(y, x):
global total_kills
for i in range(8): #먼저 쏠 방향 정하고
j = 1
while True: #일직선으로 끝까지 쏘기
ny = y+dy[i]*j
nx = x+dx[i]*j
if ny<0 or nx<0 or ny>N-1 or nx>N-1 or arr[ny][nx]==3:
#범위 벗어나거나 벽 만나면
break
if arr[ny][nx]==0:
#빈공간이면은 계속 쏘기
j+=1
if arr[ny][nx]==2:
#토끼 만나면 죽이고 계속 쏘기
total_kills +=1
j += 1
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
total_kills = 0
#상하좌우 및 대각선 8방향
dy = [-1, -1, -1, 0, 0, 1, 1, 1]
dx = [-1, 0, 1, -1, 1, -1, 0, 1]
for i in range(N):
for j in range(N):
if arr[i][j]==1: #사냥꾼이면은
hunt(i, j)
print(f'#{tc} {total_kills}')
'파이썬 알고리즘' 카테고리의 다른 글
[파이썬] 백준 7113 Rectangle (0) | 2022.10.25 |
---|---|
[파이썬] SWEA 3499 퍼펙트 셔플 (0) | 2022.10.25 |
[파이썬] 백준 5568 카드 놓기 (0) | 2022.10.24 |
[파이썬] 백준 17478 재귀함수가 뭔가요? (0) | 2022.10.24 |
[파이썬] 백준 1316 그룹 단어 체커 (1) | 2022.10.19 |