개발자 노트

[프로그래머스-2019겨울카카오인턴]크레인인형뽑기게임 본문

알고리즘 문제 풀이

[프로그래머스-2019겨울카카오인턴]크레인인형뽑기게임

jurogrammer 2020. 3. 31. 15:07

문제설명

스택 및 이차원배열을 물어보는 문제

접근

바구니는 단순히 stack만을 이용하면 되고, 이차원 배열에서 뽑을 인형을 잘 두는게 포인트.

이차원 배열도 세로로 스택으로 보기 위해 각열에서 top을 미리 찾은 다음 뽑을 때마다 +1 씩 해주는 방식으로 접근했다. 왜냐하면 아래로 갈 수록 값이 증가하니까.(이 부분에서 디버깅하는데 10분 소요했다. (전체 풀이시간 30분))

구현

def solution(board, moves):
    n = len(board)
    tops = [0 for _ in range(n)] #값이 있는 index

    for c in range(n):
        for r in range(n):
            if board[r][c] != 0:
                tops[c] = r
                break

    answer = 0
    basket = []
    for m in moves:
        position = m-1 #꺼낼 장소
        top = tops[position] #꺼낼 장소에 있는 top 번호
        if top == n: #비어 있으면 다음으로
            continue
        tops[position]+=1 #꺼낸 장소에 있는 top 1 감소

        item = board[top][position]  # 꺼낸 아이템
        if not basket: #배스킷 비어 있으면
            basket.append(item)
        else:
            if basket[-1] == item:
                basket.pop()
                answer += 2
            else:
                basket.append(item)

    return answer
반응형
Comments