본문 바로가기
🔅코딩테스트 공부🔅/❗프로그래머스(Lv.1)

[프로그래머스] Level1 크레인 인형뽑기 게임(python)

by 윤무무 2023. 2. 14.

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 내가 작성한 코드
def solution(board, moves):
    cnt = 0 #사라진 인형의 개수
    stack = [] #바구니
    
    for k in moves:
        for i in range(0,len(board)):
            if board[i][k-1] != 0:
                stack.append(board[i].pop(k-1))
                board[i].insert(k-1,0)
                break

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

    return cnt

stack 의 성질을 이용해 풀었다.

 

1. moves에서 꺼내온 원소를 "열"에 넣고, 행을 0부터 반복하며 인형이 있을 경우 stack에 append 해준다.

(참고로 게임 화면은 1부터, list의 index는 0부터 시작하기 때문에 k-1을 해주었다.)

 

ex) moves의 원소가 1일 경우 : [0][1] => [1][1] => [2][1] ...

 

 

2. stack의 원소가 2개 이상 쌓였을 경우, 제일 끝 value와 그 앞의 value가 같으면 둘 다 제거해주고

    cnt+=2를 해준다(2개의 인형이 동시에 사라지기 때문에).

 

 

2. 수정한 코드
def solution(board, moves):
    cnt = 0 #사라진 인형의 개수
    stack = []
    
    for k in moves:
        for i in range(0,len(board)):
            if board[i][k-1] != 0:
                stack.append(board[i][k-1]) #수정
                board[i][k-1] = 0 #수정
                break

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

    return cnt

pop, insert를 이용하지 않고 문제를 풀면 더 효율적인 코드가 완성된다.

댓글