코딩테스트 연습 - 크레인 인형뽑기 게임

Gyuhan Park·2021년 7월 19일
0

코딩테스트 정복

목록 보기
12/47

코딩테스트 연습 - 크레인 인형뽑기 게임

게임 화면이 담긴 2차원 배열 board와 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 구하라.

# 정답코드

단순하게 5x5 게임인 경우만 생각하여 코드를 짰고 그 다음 그 코드를 일반화시켜 문제의 정답을 찾았다.

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

    return answer

remove vs pop

크레인으로 꺼낸 인형과 바구니의 최상단에 담긴 인형이 같다면 꺼낸 인형을 바구니에 넣지 않고 바구니의 최상단에 있는 인형 한개만 지워주는 단계다.
지운다는 생각에 remove를 먼저 떠올리게 되었다. 그래서 bucket.remove(bucket[-1]) 으로 했지만 틀렸고 bucket.pop(-1) 하니까 맞았다.
뭔 차이지? 했는데 문제에 집중한 나머지 remove함수를 헷갈렸다. 여기서 remove는 bucket[-1] == 4라고 했을 때, bucket의 -1번째 값을 지우는 것이 아니라 맨 처음 찾은 4를 지우게 되므로 오류가 발생한다. 오류 외에도 remove는 O(n)의 시간이 걸리기 때문에 pop을 사용하는 것이 좋다.

profile
단단한 프론트엔드 개발자가 되고 싶은

0개의 댓글