python/알고리즘 문제풀이

[프로그래머스 | 파이썬3] 크레인 인형뽑기 게임

빛날희- 2021. 5. 19. 12:08

https://programmers.co.kr/learn/courses/30/lessons/64061

 

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

[[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

programmers.co.kr

배열과 pop함수를 사용하여 풀었다. 

배열을 순서대로 쌓는 과정에서 바로 이전 배열의 값과 반복되는 값이 있으면 이를 제거하고 다시 쌓아 올리는 방식을 택했다. 


def solution(board,moves):
    result_lst=[]
    n=0
    result=0
    for j in moves:
        for i in range(len(board)):
        
            # board배열의 해당위치에 값이 있으면 result_lst에 해당 값 추가한 후
            # 해당 값의 위치를 알려주는 n변수에 +1
            # board의 해당 위치의 인형은 이미 뽑혀 없어졌으므로 0 삽입
             if board[i][j-1]!=0: result_lst.append(board[i][j-1]); n+=1; board[i][j-1]=0; break
        
        # result_lst의 두번째 요소부터 조건식 적용, 바로 이전의 수와 방금 들어온 값이 같으면
        # 바로 이전 수와 들어온 수를 result_lst에서 빼주고 뺄 때 마다 result_lst 배열의 수 -1
        if n>= 2 and result_lst[n-2] == result_lst[n-1]:
            result_lst.pop(n-1); result += 1; n -= 1
            result_lst.pop(n-1); result += 1; n -= 1
            
    return result

해당 코드에선 result_lst의 위치를 추출하기 위해 n 변수를 사용했지만, n변수를 빼고도 충분히 구현가능하다. 

 

 

코드의 이해를 돕기 위해 다음 코드를 가져와보았다. 

바로 이전 값인 1과 가장 최근에 들어온 값인 1이 같으므로 double을 출력하고 두 요소를 배열에서 빼준다. 그러면 n값은 2가 되는데 다음 moves요소 차례에 하나의 값이 다시 추가되므로 n은 3이된다. 추가된 배열에서 요소 3과 3이 같으므로 double을 출력하고 두 요소를 또 빼준다. 

총 4개의 값이 배열에서 빠졌으므로 result는 4가 된다.