본문 바로가기

Algorithm

[프로그래머스] 크레인 인형뽑기 게임 with Pyhton


크레인 인형뽑기 게임(LEVEL 1)

2019 카카오 개발자 겨울 인턴십

 

문제 보기(프로그래머스)

내가 제출한 답안

def solution(board, moves):
    arr = []
    count = 0
    
    for i in range(len(moves)):
        n = moves[i]
        for j in range(len(board[0])):
            if board[j][n - 1] > 0:
                arr.append(board[j][n - 1])
                board[j][n - 1] = 0
                break
    
    # print(arr)
        
        if len(arr) > 1:
            if arr[len(arr) - 2] == arr[len(arr) - 1]:
                count += 1
                arr.pop()
                arr.pop()
                       
    return count * 2

 

나의 풀이

  • 문제의 설명 그대로 코드를 작성하였다.
  • 변수 i를 활용하여 'moves'의 갯수만큼 for 반복문을 작동시켜 'arr'이라는 빈 공간에 인형들을 옮기려고 한다.
  • 변수 j를 활용하여 for 반복문을 한 번 더 작동시켜 각 층마다 인형의 유무를 확인한다.
    • 크레인 작동시킨 위치에 인형이 존재한다면(board[j][n-1] > 0), 리스트 arr에 해당 번호의 인형을 옮기고(append), 해당 위치를 0으로 바꿔준다.
  • (옮기는 작업을 마치고 입력값 예시를 활용하여 arr을 출력하게 되면 [4, 3, 1, 1, 3, 2, 4]가 출력되는 것을 확인할 수 있다.)
  • 각 층마다 확인이 끝나면 arr의 상태를 확인한다.
    • arr 내부에 두 개 이상의 인형이 존재한다면(len(arr) > 1), 마지막 인형 2개를 확인한다.
    • 그 두 인형이 같은 종류라면(true) 인형을 터뜨리고(pop), 터트린 횟수(count)를 기록한다.
  • 터트릴 때, 인형 2개가 사라지므로 터트린 횟수 * 2를 반환시켜준다.

 

파이썬 관련 학습내용

  • append, pop 활용
    • arr에 인형을 담아내는 형태는 스택(LIFO)과 비슷하다.
    • arr.append(i)를 사용하여 리스트 arr의 마지막 위치에 i 값을 추가시켜준다.
    • arr.pop()을 사용하게 되면 arr의 마지막 항목을 삭제한다.(삭제된 값은 돌려주는데 이 문제에서는 따로 활용하지 않음)