프로그래머스

[Lv.1][python] 크레인 인형 뽑기 게임

밍비 2022. 8. 7. 17:37
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제는 여기서 확인할 수 있다.

def solution(board, moves):
    ans_stack = []
    answer = 0
    finished = 1
    for m in moves:
        for id, row in enumerate(board):
            if row[m - 1] != 0:
                ans_stack.append(row[m - 1])
                row[m - 1] = 0
                break

    # 같은 거 터뜨리기
    while (finished != 0):
        finished = 0
        for i in range(len(ans_stack)):
            if ((i != 0) and (ans_stack[i] == ans_stack[i - 1])):
                ans_stack.pop(i)
                ans_stack.pop(i - 1)
                answer += 2
                finished = 1
                break
    return answer

for문 안에서 pop이나 remove 쓸 때 range()로 접근할 경우 i값은 list의 변화를 인지하지 못한다는 것을 알게 해준 문제이다.

그래서 원래 return 바로 위에서 break를 안 쓰고 끝까지 가도록 구현했더니, list index out of range 오류가 떴다...ㅋㅋㅋㅋㅋ

pop을 할 때마다 처음부터 다시 보도록 코드를 바꾸니까 다행히 잘 돌아갔다!

728x90