본문 바로가기

알고리즘/카카오 EASY

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

문제

 

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

 

내 풀이

 

moves는 board에 접근할 (column index + 1)이다.

moves를 돌면서 board의 column에 접근하여 가장 위에 있는 숫자를 bucket에 넣었다.

 

bucket이 빈 공간이 될 때까지, bucket의 원소를 stack에 넣었다.

bucket에서 뺀 인형이 stack의 마지막 원소와 동일하면 stack에서 pop을 하였다.

pop을 할 때 answer를 갱신하면 답이 만들어진다.

 

def solution(board, moves):
    answer = 0
    bucket = []
    for move in moves:
        move -= 1
        # column
        q = [x[move] for x in board]
        idx = -1
        for i in range(len(q)):
            if q[i] != 0:
                bucket.append(q[i])
                idx = i
                board[i][move] = 0
                break

    stack = []
    while bucket:
        x = bucket.pop(0)
        if not stack:
            stack.append(x)
        else:
            if stack[-1] == x:
                stack.pop()
                answer += 2
            else:
                stack.append(x)
        
    return answer

 

 

다른 풀이

 

코드를 좀 더 짧게 짰다.

먼저 moves를 돌면서 stacklist에 인형을 넣는다. stacklist에 인형이 2개 이상 들어있을 때 stacklist의 마지막 인형과 마지막 인형의 밑에 있는 인형이 서로 같은지 비교한다. 이때 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

 

총평

 

나는 단계를 나누어서 문제를 풀었다면, 다른 풀이는 단계를 합쳐서 문제를 풀었다. 

어떤 것이 맞다고 할 수는 없지만, 단계를 합칠 수도 있다는 것을 배웠다.

'알고리즘 > 카카오 EASY' 카테고리의 다른 글

괄호 변환 (Level 2)  (0) 2022.06.25
메뉴 리뉴얼 (Level 2)  (0) 2022.06.25
키패드 누르기 (Level 1)  (0) 2022.05.26
숫자 문자열과 영단어 (Level 1)  (0) 2022.05.25
오픈채팅방 (Level 2)  (0) 2022.05.24