뿌요뿌요와 2048같은 구현문제를 풀다보면 리스트의 원소들을 바닥부터 다시 차곡차곡 쌓아야 하는 코드를 구현해야 할 때가 있음
뿌요뿌요를 예를들면 현재상태가 다음과 같다고 하자
0 0 0 0
a a b c
b b a a
b b b b
그럼 한번 터지면 다음과 같이 됨
0 0 0 0
a a b c
0 0 a a
0 0 b b
이때 원소들을 다시 바닥으로 떨궈줘야하는 코드를 작성할때 지금까지는 각각의 원소가 떨어지는 방향으로 좌표를 +1씩 해주면서 0을 만나면 자리를 바꿔주는 식으로 구현했음. 근데 그럴필요가 없었다. 그냥 열을 기준으로 행 마다 반복문을 걸어주는 식으로 해결할 수 있음
예를들어 다음과 같이 구현할 수있다.
for i in range(M): # 각 열
stack=[]
for j in range(N-1,-1,-1): # 각 행
if graph[i][j]!=0:
stack.append(graph[i][j])
for j in range(N-1,-1,-1):
if stack:
graph[i][j]=stack.pop()
else:
grapg[i][j]=0
코드를 입력하세요
각 열을 돌면서 stack이 존재한다는 것은 스택안의 원소들이 먼저 밑에 깔려야 한다는 것을 의미한다. 즉 스택안에 있는 원소들을 먼저 깔아준후 나머지는 그냥 무지성으로 0을 넣으면 됨