Algorithm/코드트리

[코드트리] 십자 모양 폭발 - 파이썬

potato_pizza 2024. 8. 4. 15:12
728x90

십자 모양 폭발

문제

https://www.codetree.ai/missions/2/problems/cross-shape-bomb?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

코드

  • 폭탄 범위를 처리한 그래프를 구성
  • 각 열별로 열의 값에 중력을 적용
  • 중력을 적용한 temp 리스트를 만들고 남은 부분을 다시 0을 추가하는 방식
n = int(input())

graph = [list(map(int, input().split())) for _ in range(n)]

r, c = map(int, input().split())


bomb_length = graph[r-1][c-1] # 2

# 폭탄 영향 범위 처리
graph[r-1][c-1] = 0
for i in range(1, bomb_length):
    # 위로 범위 체크 후 0으로 변경
    if r-1-i >= 0:
        graph[r-1-i][c-1] = 0
    # 아래로 범위 체크 후 0으로 변경
    if r-1+i < n:
        graph[r-1+i][c-1] = 0
    # 왼쪽으로 범위 체크 후 0으로 변경
    if c-1-i >= 0:
        graph[r-1][c-1-i] = 0
    # 오른쪽으로 범위 체크 후 0으로 변경
    if c-1+i < n:
        graph[r-1][c-1+i] = 0


for col in range(n):
    # 열의 값을 아래로 압축
    temp = []  # 새로운 열을 저장할 빈 리스트 생성

    # 모든 행에 대해 반복
    for row in range(n):
        if graph[row][col] != 0:  # 현재 위치의 값이 0이 아니라면
            temp.append(graph[row][col])  # 그 값을 temp 리스트에 추가
    # 남은 공간을 0으로 채우기
    temp = [0] * (n - len(temp)) + temp
    
    # 재배치된 열을 다시 그래프에 반영
    for row in range(n):
        graph[row][col] = temp[row]

for i in range(n):
    print(*graph[i])
728x90
반응형