728x90
*문제 출처는 프로그래머스에 있습니다.
문제 제목: 크레인 인형 뽑기 게임 (STACK 문제)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/64061
나의 풀이
예전에 문제를 제대로 못풀고 넘겼던 거라서 다시 풀어보았다.
STACK을 이용하는 기본적인 문제.
나는 보드를 새로 만들어서 각 열에 있는 원소들을 모아 따로 새로운 보드를 만들었다.
즉 1열,2열,3열...N열에 있는 원소들을 제일 위에있는 순서대로 스택에 추가한 것
N = len(board)
stack = []
new_board = [[] for _ in range(N+1) ]
for i in range(N):
for j in range(N):
if board[j][i] != 0:
new_board[i].append(board[j][i])
그 다음 새로 만든 보드판으로 moves에 해당되는 수들의 리스트(행)을 찾아 값을 stack에 넣어주었음
for i in moves:
m = i - 1
if new_board[m]:
stack.append(new_board[m].pop(0))
마지막으로 stack이 쌓이면서 위 아래로 같은 수가 있으면 그 두 수는 pop하고 answer에 +2를 해준다.
if len(stack) > 1 and stack[-1] == stack[-2]:
stack.pop()
stack.pop()
answer += 2
moves 리스트를 모두 순회하고 난 뒤 마지막 수로 인해서 stack 안에 위아래 같은 수가 있을 수도 있으니 for문 바깥에서도 한번 더 해주자.
최종 풀이
def solution(board, moves):
answer = 0
N = len(board)
stack = []
new_board = [[] for _ in range(N+1) ]
for i in range(N):
for j in range(N):
if board[j][i] != 0:
new_board[i].append(board[j][i])
for i in moves:
m = i - 1
if new_board[m]:
stack.append(new_board[m].pop(0))
if len(stack) > 1 and stack[-1] == stack[-2]:
stack.pop()
stack.pop()
answer += 2
if len(stack) > 1 and stack[-1] == stack[-2]:
stack.pop()
stack.pop()
answer += 2
return answer
모범답안
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
728x90
'coding test - python > Programmers' 카테고리의 다른 글
Programmers / 피로도 / Python 파이썬 (0) | 2022.07.28 |
---|---|
Programmers / 괄호 회전하기 / Python 파이썬 (0) | 2022.07.27 |
Programmers / 위장 / Python 파이썬 (0) | 2022.07.21 |
Programmers / 다리를 지나는 트럭 / Python 파이썬 (0) | 2022.07.20 |
Programmers / H-index / Python 파이썬 (0) | 2022.07.20 |