프로그래머스 카카오 인형 뽑기
def solution(board, moves):
box = []
count = 0
for i in moves:
for j in range(len(board)):
if board[j][i - 1] != 0:
box.append(board[j][i - 1])
board[j][i - 1] = 0
break
stack = []
while box:
if not stack:
stack.append(box[0])
box.pop(0)
elif stack[-1] != box[0]:
stack.append(box.pop(0))
else:
stack.pop(-1)
box.pop(0)
count += 2
return count
마지막에 모든 테스트 10개 다 통과했는데 1개가 자꾸 런타임에러 뜨고 안되서ㅠㅠ 런타임 에러..
2시간 헤매다가 남석님이 도와주셔서 해결했다.
이유는 모든 숫자가 똑같아서, stack에 빈값일 경우가 있을 때는, 연산자가 적용이 안되니까 생기는 문제 같다.
그래서 stack을 while문 안에 넣어서 해결했다.
문제가 쉬웠고, 기존의 문제랑은 다른 유형이었다. 그래도 그간 많이 늘었던걸 느끼는게, 어느정도 응용해서 풀었다.
y축이 인형뽑기 손이 들어오는 위치,
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
[x][y] 리스트안의 리스트의 원소가 인형뽑기 손이 들어오는 위치로 설정하고, 인형을 뽑을 때마다
빈 리스트에 넣어줬다.
box = []
count = 0
for i in moves:
for j in range(len(board)):
if board[j][i - 1] != 0:
box.append(board[j][i - 1])
board[j][i - 1] = 0
break
이 부분은 box에 리스트를 담는다.
0인 경우는 통과하고, 만약 box에 담았으면, 담은 원소를 뽑았으니까 0으로 바꿔준다.
stack = []
while box:
if not stack:
stack.append(box[0])
box.pop(0)
elif stack[-1] != box[0]:
stack.append(box.pop(0))
else:
stack.pop(-1)
box.pop(0)
count += 2
빈 리스트를 만들고,
처음 뽑기를 저장한 box의
0번쨰 인덱스를 넣어주고, box는 0번째 인덱스를 뺴준다.
반복해서 stack의 마지막 부분과 box의 처음 부분을 비교해가면서
box의 리스트를 줄이다, while문을 끝낸다.
이 문제 푼다고 2시간을 넘게 썼다 하ㅠㅠ 다음엔 더 잘할 수 있겠지.
그래도 백준 풀다가 딴거 푸니까 좋당.
처음이랑 다르게 이제 어느정도 쓰기도 하고.
열심히 하면 늘겠지
'Back > Algorithm' 카테고리의 다른 글
백준 1904 01타일 파이썬 (0) | 2021.03.21 |
---|---|
백준 1065 한수 파이썬 (0) | 2021.03.18 |
백준 10870 피보나치수5 파이썬 (0) | 2021.03.17 |
Python 백준 1436 영화감독 (0) | 2021.03.15 |
Python 백준 2108 통계학 (0) | 2021.03.15 |