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
반응형
'Algorithm > 코드트리' 카테고리의 다른 글
[코드트리] 숫자가 가장 큰 인접한 곳으로 동시에 이동 - 파이썬 (0) | 2024.08.07 |
---|---|
[코드트리] 숫자가 더 큰 인접한 곳으로 이동 - 파이썬 (0) | 2024.08.05 |
[코드트리] 1차원 젠가 - 파이썬 (0) | 2024.08.04 |
[코드트리] 삼각형 컨베이어 벨트 - 파이썬 (0) | 2024.08.02 |
[코드트리] 컨베이어 벨트 - 파이썬 (0) | 2024.08.02 |