문제출처 : 프로그래머스

문제소개

크레인 인형뽑기
- 5x5 ~ 30x30 틀(board)에 담긴 인형을 바구니(bucket)로 옮긴다. 
- board에서 가장 위에 있는 인형만 옮길 수 있다.
- bucket에 쌓인 인형 중 같은 모양의 인형이 2개가 붙게되면 2개의 인형은 사라진다.
- 사라진 인형의 갯수를 return 하는 프로그램을 작성하시오.

입력)
# 2차원 배열로 최초 인형이 담긴 틀(A) 
board = [[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]]	
# 크레인을 작동시킨 위치가 담긴 배열 (board의 가로크기 이하 자연수로 구성)
moves = [1,5,3,5,1,2,1,4]

출력)
result = 4

코드

def solution(board, moves):
    bucket = []
    answer = []
    
    for move in moves: # 크레인 이동 1건씩 실행
        for i in range(len(board)): # board의 윗행부터 검사 
            # board의 숫자가 0보다 크면
            if board[i][move-1] > 0: # 인덱스보정 -1 
                # 인형을 bucket에 담고 
                bucket.append(board[i][move-1])
                board[i][move-1] = 0 # 그 자리를 0으로 바꾼다.
                
                # bucket 가장 위에 있는 2개가 숫자가 같다면 
                if bucket[-1:] == bucket[-2:-1]:
                    answer += bucket[-1:] # 사라진 인형을 answer 리스트에 추가
                    bucket = bucket[:-2] # 위의 두 인형을 지운다.
                break # 끝난 뒤 break 안해주면 한번 더 실행되며 answer이 +2 될수도 있음
                
    return len(answer)*2
# 2차원 배열로 최초 인형이 담긴 틀(A) 
board = [[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]]	
# 크레인을 작동시킨 위치가 담긴 배열 (board의 가로크기 이하 자연수로 구성)
moves = [1,5,3,5,1,2,1,4]

solution(board, moves)
4
profile
Data & PM

0개의 댓글