Python/Programmers

Lv.1-크레인 인형뽑기

JAEJUNG 2021. 7. 7. 15:36

문제

인형의 위치가 놓인 배열 board와 인형뽑기 기계가 내려갈 위치가 적힌 moves 배열이 주어진다.

  1. 0이 아닌 위치를 집으면 이 숫자는 bucket에 담긴다.
  2. 한번 집은 자리는 0이 된다.
  3. bucket의 숫자는 바닥부터 저장되며 같은 수가 만나게 되면 사라진다.

사라진 인형의 개수를 return 하시오.

 

내 코드

def solution(board, moves):
    bucket= []
    board_len = len(board)
    i = 0
    cnt = 0
    for y in moves:
        for x in range(board_len):
            if board[x][y-1] != 0:
                bucket.append(board[x][y-1])
                board[x][y-1] = 0
                i += 1
                break
        if i > 1 and bucket[i-1] == bucket[i-2]:
            del bucket[i-1]
            del bucket[i-2]
            i -= 2
            cnt += 2
    return cnt

 

문제 풀이

  1. 0이 아닌 원소 선택 시 bucket에 넣는다.
  2. bucket에 넣고 해당 자리를 0으로 바꾼다.(넣으면 break)
  3. bucket에 넣을 때의 인덱스와 -1 한 인덱스가 같으면 count 값을 2 증가시키고 -1 인덱스 자리를 remove한다.

 

고수 풀이

  • 나는 배열에서 del로 값을 제거했는데 stack을 이용하여 pop을 하면 더 수월해보인다.
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

'Python > Programmers' 카테고리의 다른 글

Lv.1-키패드 누르기  (0) 2021.07.08
Lv.1-내적 구하기  (0) 2021.07.07
Lv.1-모의고사  (0) 2021.07.07
Lv.1-체육복  (0) 2021.07.07
Lv.1-로또의 최고 순위와 최저 순위  (0) 2021.07.07