🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💙프로그래머스

[2019 카카오 개발자 겨울 인턴십 / Level1👶🏻] 크레인 인형뽑기 게임(python)

안오늘 2021. 6. 29. 21:07

1. 문제 설명

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

게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.

귀여웡!! ㅋㅋ 이해가 쏙 되게 gif가 되어있었다!

2. 나의 풀이

def solution(board, moves):
    answer = 0
    
    stack = []
    
    for move in moves:
        for i in range(len(board)):
            if board[i][move-1] != 0:
                stack.append(board[i][move-1])
                board[i][move-1] = 0
                
                if len(stack) > 1:
                    if stack[-1] == stack[-2]:
                        stack.pop()
                        stack.pop()
                        answer += 2
                break
    print(stack)
    
    return answer

1. moves(열 위치 나타냄)만큼 크레인을 작동시킨다. 
2. 크레인을 작동시킬 때는 해당 move의 위치에 있는 값을 스택에 넣는다.
3. 스택에 바로 연이어서 같은 값이면 두 개를 stack에서 pop하고, answer 값을 2개 올린다. 

3. 다른 사람의 풀이

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

정말 비슷하게 풀었다! 오오 뿌듯해~~~~~!!!!!!!

 

4. 깨달은점

아이패드에 코드가 돌아가는 것을 직접 그리면서 생각하니까 놓친 것도 찾고 좋았다!

stack 마지막과 그 전이 같으면 pop() 해주려고 했는데, 자꾸 list range에러가 났는데, len(stack)>1인 경우일 때를 안 적어서였다..

꼼꼼하게 처리해야함이 중요하다는 것을 다시 한번 배웠다!

 

다른 프로그래머스 문제들은 이중 for문 쓰면 효율성에서 에러나서 걱정했는데... 에러가 안나서 좋았당 ........! 

 

다시 한 번 풀 때는 더 빠른 속도로 풀어야겠다!!!!!