SOO LOG
  • [코드트리] 십자가 모양의 지속적 폭발
    2024년 06월 20일에 업로드 된 글입니다.

    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)
    댓글