공돌이 공룡의 서재

[프로그래머스 Level 1] 크레인 인형뽑기 / 2019 카카오 개발자 겨울 인턴십 / 파이썬 본문

코딩/프로그래머스

[프로그래머스 Level 1] 크레인 인형뽑기 / 2019 카카오 개발자 겨울 인턴십 / 파이썬

구름위의공룡 2020. 9. 2. 16:46

<문제>

 

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

문제가 상당히 길어서 링크로 대체.

 

<풀이>

 

def solution(board, moves):

    ##1
    answer = 0
    line = {}
    box = []
    
    ## 2
    for i in range(len(board)):
        line[i+1] = []
        
    for i in board[::-1]:
        for j in range(len(i)):
            if i[j] != 0:
                line[j+1].append(i[j])

    # print(line)
    # print(moves)
    
    ## 3
    for i in moves:
        # print('Morning', box)
        if len(line[i]) > 0:
            pick = line[i].pop()
            box.append(pick)
            # print('Lunch', box)
            if len(box) > 1:
                if box[-1] == box[-2]:
                    box.pop()
                    box.pop()
                    answer += 2
        else:
            pass
        # print('Dinner', box)

    print(answer)
    return answer

 

코드 설명:

##1 : 다른 풀이 방법들도 있겠지만 개인적으로 board로 주어진 list를 그대로 다루면 좀 헷갈릴 것 같아서 처음부터 세로줄마다 dictionary를 만드는 방법을 택했다. box는 뽑고 난 인형을 담을 배열이다. 

 

##2: board는 NxN 형태에 가로줄에 있는 인형들의 종류가 주어져있는 형태로 우선 board 길이만큼 dictionary를 만든다. key는 세로로 몇 번째 줄인지, value는 그 줄에 들어있는 인형들의 종류로, 오른쪽일수록 위에 있고 왼쪽에 있을수록 밑에 있는 인형이다. (for문을 돌렸을 때 board[::-1]로 돌렸기 때문에 append만으로 이렇게 구현하는 것이 가능하다.) 0인 경우는 인형이 없는 경우이므로 dictionary의 value에 넣지 않는다.

 

##3: moves를 탐색한다. line의 value 배열의 길이가 0이면 더 이상 꺼낼 인형이 없다는 뜻이므로 pass하고, 아니면 하나 꺼낸다. 이 꺼낸 인형이 변수 pick에 해당한다. box에 pick을 넣고 box의 길이가 1보다 클때 맨 위에 있는 2개를 검사한다. 같으면 2개 지우고 answer값을 2 더해준다.

 

 

+@:
추가로 확인해본 테스트케이스다.

 

solution(board=[[0,0,0,0,0,0],[0,0,1,0,3,0],[0,2,5,0,1,2],[4,2,4,4,2,6],[3,5,1,3,1,6],[1,2,3,4,5,6]],
moves=[1,4,2,2,2,2,6,6,6])

 

답이 8 이 나오면 된다.

 

## 풀다가 했던 실수:

문제 조건에서 NxN board인데 5x5로 보고 line을 {1: [], 2: [], 3: [], 4: [], 5: []} 으로 놓고 풀었더니 런타임에러가 떴다. moves에 6이나 9가 있다면 line에 해당하는 key값이 없기 때문이다.

 

Comments