728x90
def isEmpty(stack):
return (len(stack) == 0)
def solution(board, moves):
answer = 0
b_stack = {}
stack = []
height = len(board)
width = len(board[0])
for w in range(width):
tmp = []
for h in range(height-1, -1, -1):
if (board[h][w] == 0):
break
else:
tmp.append(board[h][w])
b_stack[w+1] = tmp
for m in moves:
if (not isEmpty(b_stack[m])):
item = b_stack[m].pop()
if (not isEmpty(stack) and stack[-1] == item): # 스택 top이랑 item값 비교
stack.pop()
answer += 2 # 터졌다!
else:
stack.append(item)
return answer
<내 코드 분석>
■ 사용한 변수: b_stack(각 열에 해당하는 스택들의 모임), stack(뽑은 인형을 쌓을 바구니 스택), height(보드의 행의 수), width(보드의 열의 수)
1. 코드를 간결하게 만들기 위해 isEmpty함수를 만들어줌. (코드를 다 작성한 후 따로 빼준 것)
2. board의 각 열은 순서대로 1,2,3,4 ... 의 값을 가진다.(크레인이 인형을 뽑는 위치) b_stack은 이 값을 키값으로 가지며, value로 스택을 가진다. 인형이 스택구조와 유사하게 뽑힌다는 점을 이용한 것이다.
3. 보드값을 입력받으면 그 값들을 이용하여 b_stack을 만들어줌.
4. moves값을 하나씩 빼서 딕셔너리에 키 값으로 접근한다. 해당 스택이 비어있지 않다면 인형을 뽑고(pop) stack에 넣기 전 터져야하는지 확인한 후 append를 해준다.
> 다른 사람들은 더 짧은 코드로 단순하게 문제를 풀었다. 굳이 새로운 스택을 만들면서까지 문제를 풀 필요는 없었던 것 같다. 다음에는 입력값을 정재하지 않고 문제를 풀 수 있는 방법을 더 고려해봐야겠다.(입력값을 바꾸는 데에 시간이 많이 걸렸다.)
728x90
'알고리즘 > programmers[1]' 카테고리의 다른 글
[프로그래머스] 음양 더하기 (0) | 2022.01.10 |
---|---|
[프로그래머스] 없는 숫자 더하기 다른 풀이 (0) | 2022.01.10 |
[프로그래머스] 없는 숫자 더하기 (0) | 2022.01.09 |
[프로그래머스]크레인 인형뽑기 게임 다른 풀이 (0) | 2022.01.09 |
로또 최고, 최악 순위 문제 (0) | 2022.01.03 |