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를 업데이트하는 걸 놓쳐서였습니다. 
실수 알아챈 뒤 수정을 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()으로 마지막 원소 꺼낼 수 있는 걸 생각을 못 했네요.

저는 마지막 원소 제거한 동일 배열을 다시 생성해 만드는 식으로 구현했습니다. 사실 해당 배열이 스택 자료구조를 사용하고 있는 걸 알면서도 해당 메서드를 떠올리지 못 한건 아쉽습니다.