기록

[Python] 크레인 인형뽑기 게임 본문

[Study]/코딩테스트 연습

[Python] 크레인 인형뽑기 게임

Dannnnnn 2020. 11. 8. 21:52
반응형

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):
    answer = 0
    doll = []

    for m in moves:
        for b in board:
            if b[m-1] == 0:
                continue
            else:
                doll.append(b[m-1])
                b[m-1] = 0
                break

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

board라는 이차원 리스트를 moves에 들어있는 값을 '열'로 삼아 순차적으로 board 끝까지 검사해야해요.

그래서 board를 b라는 이름으로 한 행마다 가져와서 해당 행의 m-1 열을 검사했습니다.

b[m-1] == 0이면 다음 행으로 넘어가고, 아닐 시에는 doll이라는 이름의 리스트(Stack 역할)에 값을 넣어주고 board 행 검사를 멈춥니다.

 

doll 리스트에 인형이 두 개 이상 존재할 때는 방금 추가된 인형과 인접한 인형이 같은지 검사합니다.

같으면 두 인형을 제거하고, answer의 값을 2만큼 올려주면 되겠죠?

 

def solution(board, moves):
    answer = 0
    stack = []

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

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

    return answer

비슷한 풀이

 

def solution(board, moves):
    moved = []
    answer = 0
    for m in moves:
        for i in range(len(board)):
            c = m-1
            if board[i][c] != 0:
                doll = board[i][c]
                board[i][c] = 0
                 
                if len(moved) == 0:
                    moved.append(doll)
                elif len(moved) > 0 and doll != moved[-1]:
                    moved.append(doll)
                else:
                    answer += 1
                    del moved[-1]
                break

    return answer*2

moved 리스트의 길이가 1 이상이면 뽑은 인형을 바로 moved에 넣지 않고

moved의 맨 마지막 값(top)과 비교해서 del (pop) 연산을 1회만 수행하게 하는 코드입니다.

반응형

'[Study] > 코딩테스트 연습' 카테고리의 다른 글

[Python] 키패드 누르기  (0) 2020.11.10
[Python] 실패율  (0) 2020.11.09
[Python] 3진법 뒤집기  (0) 2020.11.07
[Python] 비밀지도  (0) 2020.11.07
[Python] 다트 게임  (0) 2020.11.07