[프로그래머스 / lv.1] 크레인 인형뽑기 게임


날짜: 2021년 5월 30일
소요 시간: 58분 24초
카테고리: 수학 문제
태그: 레벨1, 파이썬

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

입출력 예시

boardmovesresult
[[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]][1,5,3,5,1,2,1,4]4

내가 적은 코드

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

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

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

풀이 과정

i는 크레인이 움직인 행을 의미한다.(배열의 첫번째가 0으로 시작하므로 -1을 해준다.)
j는 board의 열을 의미한다.
그래서 0이 아닌 그러니까 인형이 존재하는 칸을 만났을 때 그 원소를 0으로 치환하고 그 값은 arr에 담는다.
만약 arr의 맨 뒤의 두 원소가 같을 때 두 개의 원소를 pop하고 결과 값에 2를 더한다.
그럼 마지막에는 사라진 인형의 개수가 answer에 저장된다.

베스트 코드

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

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

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

    return answer

반성

  • 이제 레벨 1정도의 브루트 포스 알고리즘의 로직은 어느정도 구현할 수 있는 것 같다.
  • 구현 단계에서 파이썬의 기본적인 문법에 대한 이해도가 낮아서 리스트 슬라이싱이라던지 자료형이라던지에서의 실수가 잦다.




© 2021. by hminkim