알고리즘 풀이/프로그래머스

[Level 1] 크레인 인형 뽑기

mhko411 2021. 2. 18. 23:54
728x90

programmers.co.kr/learn/courses/30/lessons/64061?language=python3

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr


접근

스택을 이용하면 쉽게 풀 수 있을 것이라고 생각했다.

 

구현

스택과 보드의 길이를 생성한다.

이후 크레인의 움직이는 정보가 담긴 moves에서 정수 x를 -1로 한 후에 세로 축 탐색을 진행한다

만약 숫자가 나오고 스택이 비었다면 바로 스택에 넣고 

스택이 비어있지 않다면 스택의 맨 위와 현재 정수를 비교하여 같다면 최종해 +2 (한 번에 2개가 터짐)

이후 스택의 top을 pop한다.

만약 숫자가 같지않다면 그대로 스택에 넣어준다.

위 과정을 거치고 그 자리는 0으로 변경한다.

    stack = []
    N = len(board)
    for x in moves:
        x -= 1
        for y in range(N):
            if board[y][x] != 0:
                if not stack:
                    stack.append(board[y][x])
                else:
                    if stack[-1] == board[y][x]:
                        answer += 2
                        stack.pop()
                    else:
                        stack.append(board[y][x])
                board[y][x] = 0
                break

전체 코드

def solution(board, moves):
    answer = 0
    stack = []
    N = len(board)
    for x in moves:
        x -= 1
        for y in range(N):
            if board[y][x] != 0:
                if not stack:
                    stack.append(board[y][x])
                else:
                    if stack[-1] == board[y][x]:
                        answer += 2
                        stack.pop()
                    else:
                        stack.append(board[y][x])
                board[y][x] = 0
                break

    return answer