백준 뿌요뿌요와 2048을 풀다 생각난것

yjkim·2023년 7월 12일
0

알고리즘

목록 보기
31/60

뿌요뿌요와 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을 넣으면 됨

profile
We may throw the dice, but the Lord determines how they fall

0개의 댓글