알고리즘 스터디 2021.07~

[프로그래머스] 2019 카카오 겨울인턴 - 크레인 인형뽑기

문제

https://programmers.co.kr/learn/courses/30/lessons/64061

 

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

[[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


풀이

그냥 단순 구현문제였다.

def solution(board, moves):
    answer = 0
    stack = []
    
    for m in moves:
        for row in board:
            if row[m-1] != 0: #해당 줄의 가장 위에 놓인 인형을 스텍에 쌓음
                stack.append(row[m-1])
                row[m-1] = 0
                break
        if len(stack) >= 2: #쌓인 인형이 1개 이하일 때 발생하는 예외처리
            if stack[len(stack)-1] == stack[len(stack)-2]: #최근에 쌓인 두 인형의 종류가 같다면
                answer += 2 #두개의 인형을 없앰
                stack.pop()
                stack.pop()
    
    return answer

 


다른 사람의 풀이

def solution(board, moves):
    stacklist = []
    answer = 0

    for i in moves:
        for j in range(len(board)):
            if board[j][i-1] != 0:
                stacklist.append(board[j][i-1])
                board[j][i-1] = 0

                if len(stacklist) > 1:
                    if stacklist[-1] == stacklist[-2]:
                        stacklist.pop(-1)
                        stacklist.pop(-1)
                        answer += 2     
                break

    return answer

로직은 비슷하다

stacklist[-1], stacklist[-2] 이렇게 가져오는 문법이 있다는 것을 배웠다.