본문 바로가기
코딩 테스트 연습

[알고리즘] 프로그래머스 - 크레인 인형뽑기 게임

by 코드뭉치 2023. 5. 2.

크레인 인형뽑기 게임

 

 

보드 정렬하기, 0은 아예 넣지 않고 시계방향으로 90도 돌려버린 리스트로 바꾼 후,

 

result가 비어있거나, 이번에 뽑은 값과 전에 뽑은 값이 다르면, 그냥 크레인으로 뽑아서 result에 넣기

 

리스트가 비어있지 않고, 이전에 뽑은값 == 전에 뽑은 값이면,

result에 넣지 않고, result에서 pop 하고, 카운트를 2개 올림

def solution(board, moves):
    new_board = []
    for i in range(len(board[0])):
        arr = [board[j][i] for j in range(len(board[0])) if board[j][i]]
        arr.reverse()
        new_board.append(arr)

    result = []
    answer = 0
    for i in moves:
        if new_board[i-1]:
            if not result or new_board[i-1][-1] != result[-1]:
                result.append(new_board[i-1].pop())
            else:
                new_board[i-1].pop()
                result.pop()
                answer += 2
    return answer

 

 

보드를 정렬하지 않고, 주어진 보드에서 바로 시작.

def solution(board, moves):
    answer = 0
    basket = [0]
    for j in moves:
        for i in board:
            if i[j-1] != 0:
                if i[j-1] == basket[-1]:
                    answer += 2
                    basket.pop()
                else:
                    basket.append(i[j-1])
                i[j-1] = 0
                break
            else:
                pass
    return answer

 

 

결과값 리스트에 넣은 후에, 리스트 길이가 1 초과이고, -1번째 인덱스와 -2번째 인덱스가 같으면,

pop() 두번 해서 없애기.

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

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

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

댓글