언어, 프레임워크/Python & Django

[TIL] Python 쉬운 알고리즘 문제 풀기 + 정리

jaee 2020. 8. 20. 22:14

 

별건 없지만 일단 기록! 알고리즘 풀고 알게된 내용 정리 🐌

 

프로그래머스 Level 1

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

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[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]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

def solution(board, moves):
    answer = 0
    stack = []

    while len(moves) > 0:
    	# 파이썬은 pop()안에 인덱스를 넣어 해당 인덱스 요소를 뺄 수 있다
        i = moves.pop(0)
        for arr in board:
            if(arr[i - 1] != 0):
                stack.append(arr[i - 1])
                arr[i - 1] = 0
                break

        if len(stack) >= 2:
            # 끝 요소와 끝에서 두번째 요소가 동일하면
            if stack[-1] == stack[-2]:
            	# 뒤에서 2개를 제거
                stack = stack[:-2]
                answer += 2
                
    return answer

del은 삭제한 값을 반환하지 않기 때문에, 삭제한 값을 사용해야 되는 이러한 문제에선 pop()으로 제거를 한 뒤 해당 값을 변수에 할당해서 사용하는 게 좋을 것 같다.(remove는 삭제할 값을 지정해줘야 하기 때문에 아예 이런 상황에선 패스!)

 

 

 

왜 리스트에서 값을 빼는 건 pop이고 추가하는 건 append일까 궁금해서 찾아봤는데 큰 이유는 없었다. append는 파이썬 초기(1991)에 만들어졌고 pop은 이보다 나중에 만들어졌는데, pop과 의미를 맞추자고 push를 만들기에는 이미 append가 같은 기능을 하여 append가 살아남았다고 한다.