코딩테스트/✳️코드트리
[코드트리] 십자가 모양의 지속적 폭발
@soohh
2024. 6. 20. 17:19
https://www.codetree.ai/missions/2/problems/cross-shape-continuous-bomb?&utm_source=clipboard&utm_medium=text
🔷 나의 구현 스케치
0행부터 n행까지 주어진 열의 값이 0이 아닌 첫 행을 찾아 bomb() 을 수행한다. bomb은 선택된 칸에 적혀있는 크기만큼 십자가 모양의 터지는 것을 의미하는데, 이는 배열 범위안에 있는 십자가 모양의 크기의 수들을 0으로 한다.
이후 down 함수를 통해 각 열을 n행부터 1행까지 확인하며 빈행은 한칸 윗 행의 값을 아래로 내리고 윗 행을 0으로 두어 중력이 작용하는 것을 구현한다.
🔷 나의 구현 코드
def in_range(x,y):
return 0<=x<n and 0<=y<n
def bomb(x,y, value):
for dx,dy in zip(dxs, dys):
nx,ny = x,y
grid[x][y] = 0
for _ in range(value):
nx,ny = nx+dx, ny+dy
if in_range(nx,ny):
grid[nx][ny] = 0
else:
break
down()
def down():
for col in range(n):
for row in range(n-1,0,-1):
if not grid[row][col]:
grid[row][col],grid[row-1][col] = grid[row-1][col],0
n,m = map(int,input().split())
grid = [list(map(int,input().split())) for _ in range(n)]
dxs, dys = [0,1,0,-1], [1,0,-1,0]
for _ in range(m):
col = int(input())
col -= 1
for row in range(n):
if grid[row][col]:
bomb(row, col, grid[row][col]-1)
break
for row in grid:
print(*row)