자기개발👨‍💻/코딩 알고리즘

[python] 2019 카카오 크레인 인형뽑기 게임

천숭이 2021. 1. 2. 15:35
def solution(board, moves):
    answer = 0  # basket에서 같은거 만날때 +1
    vertical=[]
    basket=[]
    
    for i in range(len(board)):
        vertical.append([])

    for i in board:
        for j in range(len(board)):
            # i는 board순회 j는 board의 인덱스 추출
            vertical[j].append(i[j])
    
    for i in moves:  # i는 board의 가로 번호
        j=0
        while(vertical[i-1][j]==0):
            # 0이 나오지않을때까지 vertical원소 지나치기
            j+=1
            if j==len(board)-1:break # 모두 0일때 
                
        if vertical[i-1][j]!=0:
            basket.append(vertical[i-1][j])
            vertical[i-1][j]=0
            
        length=len(basket)
        for b in range(1,length):
            if basket[b-1]==basket[b]:
                    basket[b-1]=0
                    basket[b]=0
                    answer+=1
        while(basket.count(0)>0):
            basket.remove(0)

    return answer*2

board의 인형들을 같은인덱스끼리 따로 저장한다. 즉, 세로열의 원소들끼리 따로 뽑아서 vertical 리스트에 저장한다.

반복문을 사용해 move에 해당하는 인덱스를 i로 순회시키고 vertical에 접근한다.

0은 빈 공간이므로 0이 아닌 원소가 나올때까지 while문을 사용해 접근한다.

이때 한줄이 0일때가 있기때문에 break문을 이용해 빠져나오고, 0인지 또 확인해 basket(인형 바구니)에 넣어준다.

바구니에 넣어준 인형들은 0으로 값을 바꿔준다. 이 작업이 move의 크기만큼 반복된다.

 

작업이 끝날때마다 바구니에 같은 인형이 연속적으로 있는지 확인해주고 같은 인형들은 삭제하고 answer+1을 진행시킨다.

반환값은 사라진 인형들의 개수이므로 answer의 두 배가 된다.