Algorithm/Programmers

[Python] 크레인 인형 뽑기 게임

느낌표 공장장 2021. 4. 5. 22:09
def solution(board, moves):
    
    bucket = []
    answer = 0
    
    for i in range(len(moves)) :
        # 맨 윗줄이 0 이면 그 밑의 줄로 이동
        for j in range(len(board)) :
            item = board[j][moves[i]-1]
            if item != 0 :
                break
                
        # 한줄 전체가 비었을 경우 맨 처음으로 돌아감
        if item == 0 :
            continue
                    
        bucket.append(item)
        board[j][moves[i]-1] = 0
        if len(bucket) >= 2 and item == bucket[-2] :
            del bucket[-2:]
            answer += 2
    
    return answer

풀이

    for i in range(len(moves)) :
        # 맨 윗줄이 0 이면 그 밑의 줄로 이동
        for j in range(len(board)) :
            item = board[j][moves[i]-1]
            if item != 0 :
                break
                
        # 한줄 전체가 비었을 경우 맨 처음으로 돌아감
        if item == 0 :
            continue

1. 먼저 moves의 길이만큼의 반복문을 먼저 만들어 준다.

2. 두번째 반복문에서는, moves에 입력되어 있는 각각의 값(칸)에서 맨 위부터(board[0]부터) 뽑아내는데, item이 0이면 지나쳐서 그 밑의 칸으로 이동하는 형식으로 만들어 주었다.

     (board는 행을 기준으로(?) 입력되어있다. 따라서 j를 1씩 더해주며 옮겨준다.)

     예를 들면 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]]이고, moves가 1 일때, 

     [0,0,0,4,3](board[0:4][0]) 에서 0을 제외한 맨 처음 값을 뽑아내는 것임

   2) 그러나 그 칸 전체가 0일 경우에는, 맨 처음 for문으로 돌아가준다. (0을 bucket에 담는 것을 방지)

 

       bucket.append(item)
        board[j][moves[i]-1] = 0
        
        if len(bucket) >= 2 and item == bucket[-2] :
            del bucket[-2:]
            answer += 2​

1. item을 bucket에 담아주고

2. board에서 item이 있던 자리에 0을 대입시켜준다.(item을 꺼냈으므로)

3. bucket에 item이 2개 이상 담겨있고, 마지막에 담은 item과 그 아래에 있는 item이 같다면,

    1) 아이템 둘을 지워준다.

    2) 아이템 두대가 없어졌으므로 answer에 +2 해준다.

'Algorithm > Programmers' 카테고리의 다른 글

[Python] 모의고사  (0) 2021.04.06
[Python] 신규 아이디 추천  (0) 2021.04.05
[Python] 두 개 뽑아서 더하기  (0) 2021.04.04
[Python] 기본 수학 1  (0) 2021.02.11
[Python] 기본수학 1  (0) 2021.02.02