크레인 인형뽑기 게임 _ Lv.1

2022. 9. 9. 07:272022/Programmers_Kakao 기출

매번 내가 푼 문제와 비교해보는데...

나보다 간결하고 쉽게 푼 사람들 보면 "통과"에 의의를 뒀던 과거의 내가 부끄러워지고,

효율성과 적절한 알고리즘을 고려하여 문제를 푸는 것이 중요하다는 생각이 든다.

from collections import deque
def solution(board, moves):
    answer = 0
    pickQueue = [deque([]) for _ in range(len(board))]
    for i in range(len(board)):
        for j in range(len(board)):
            if board[i][j] != 0:
                pickQueue[j].appendleft(board[i][j])

    resultQueue = deque([])
    lastDoll = 0
    for m in moves:
        if len(pickQueue[m-1])==0:
            continue
        else:
            newDoll = pickQueue[m - 1].pop()
            if newDoll == lastDoll:
                resultQueue.pop()
                answer += 2
                if len(resultQueue)>0:
                    lastDoll = resultQueue[-1]
                else:
                    lastDoll = 0
            else:
                resultQueue.append(newDoll)
                lastDoll = newDoll

    return answer

 

위의 문제는 내가 풀이한 문제이다. 그리고 아래는 Stack을 이용한 풀이를 참고하여 다시 짜본 코드이다.

 

def solution(board, moves):
    answer = 0

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

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

'2022 > Programmers_Kakao 기출' 카테고리의 다른 글

두 큐 합 같게 만들기 _ Lv.2*  (0) 2022.09.10
성격 유형 검사하기 _ Lv.1  (0) 2022.09.06
키패드 누르기 _ Lv.1  (0) 2022.09.06
숫자 문자열과 영단어 _ Lv.1  (0) 2022.09.05
신규 아이디 추천 _ Lv.1  (0) 2022.09.04