CodingTest/Programmers
[ 프로그래머스 ] 크레인 인형뽑기 게임
EEOOOO
2022. 6. 22. 16:57
/ 제출 1 /
def solution(board, moves):
answer = 0
n = len(board)
last = [100]
for move in list(map(lambda x:x-1,moves)):
# 세로줄 끝까지 체크
for i in range(n):
# 0 나오면
if board[i][move] != 0:
#넣기 전에 체크
if last[-1] == board[i][move]:
last = last[:-1]
board[i][move] = 0
answer += 2
else:
last.append(board[i][move])
board[i][move] = 0
break
return answer
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
소요시간 40분
40분 중 15분을 에러 하나 잡는데 보냈습니다.. 하... 이렇게 바보 같이 알고리즘 동작 가정에서 실수로 빼먹어서 쓸데 없이 시간 낭비하면 안 되는데.. ㅠㅜㅜ
일단 board의 인덱스 구성을 전보다 빠르게 파악하게 된 것 같습니다. 손으로 써야 잡힙니다. 공간지각능력이 좋은 편이 아니라 그림으로 그려야지 안 헷갈리더랍니다.
동작은 문제가 원하는대로 그대로 구현하려 노력했습니다. 그런데도 빼먹은 부분이 있었다니..
시간 잡아먹은 건 이미 처리된 아이템을 넣는 last배열에서 같은 것이 있는 경우가 아닌. 즉, 그냥 넣는 경우에 board를 업데이트하는 걸 놓쳐서였습니다.
시간 잡아먹은 건 이미 처리된 아이템을 넣는 last배열에서 같은 것이 있는 경우가 아닌. 즉, 그냥 넣는 경우에 board를 업데이트하는 걸 놓쳐서였습니다.
실수 알아챈 뒤 수정을 3초만에 끝나더라고요.허무했습니다. 꼼꼼히 문제 봅시다.
/ 다른 분들 풀이 /
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
아.. 배열에서 pop()으로 마지막 원소 꺼낼 수 있는 걸 생각을 못 했네요.
저는 마지막 원소 제거한 동일 배열을 다시 생성해 만드는 식으로 구현했습니다. 사실 해당 배열이 스택 자료구조를 사용하고 있는 걸 알면서도 해당 메서드를 떠올리지 못 한건 아쉽습니다.