⚡️algorithm

[스택] 프로그래머스 lv1. 크레인 인형뽑기 게임

남남이루 2022. 5. 30. 14:43

문제

인형이 쌓인 board에서 맨 위에 인형 하나씩 moves에 따라 꺼낸다. 꺼낸 인형들은 바구니에 담는데,
바구니에 담긴 인형들은 연달아 같은 인형이 담길 경우 제거된다. 제거된 인형의 개수는?
문제 바로가기

코드

def solution(board, moves):
    bucket = []
    for j in moves:   # 각 열에 있는 인형들 꺼내서 바구니에 담기
        for i in range(len(board)):
            if board[i][j-1] != 0:
                bucket.append(board[i][j-1])
                board[i][j-1] = 0
                break

    cnt = 0
    while True:
        long = len(bucket)                  # 더이상 인형제거가 발생하지 않는지 확인하기 위해
        for i in range(1,len(bucket)):
             if bucket[i-1] == bucket[i]:  # 앞이랑 같은 인형이면 제거
                cnt += 2
                bucket.pop(i-1)
                bucket.pop(i-1)
                break
        if long == len(bucket) or not bucket:     # 인형제거 없으면 while 멈춤
            break

    return cnt

발전된 코드, 바구니에 넣을 때 검사해서 제거

# 스택
def solution(board, moves):
    bucket = []
    cnt = 0
    for j in moves:
        for i in range(len(board)):
            if board[i][j-1] != 0:
                bucket.append(board[i][j-1])
                board[i][j-1] = 0

                if len(bucket)>1 and bucket[-1]==bucket[-2]:
                    bucket.pop(-1)
                    bucket.pop(-1)
                    cnt +=1
                break

return cnt*2

1h 10m 정도 걸렸다.