bit가 눈 앞에서 왔다갔다

Py) 프로그래머스 64061 크레인 인형뽑기 게임 본문

Algorithm/Prob

Py) 프로그래머스 64061 크레인 인형뽑기 게임

헬린인형 2022. 3. 23. 23:01

https://programmers.co.kr/learn/courses/30/lessons/64061

 

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

[[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

 

1차 - 9:15 ~ 10:24

귀엽

1. 입출력

 

2. 

2-1. 내 접근

1) moves의 원소 하나하나를 인덱스로 취급하고 2차원 리슽트 board에서 각 1차원 리스트마다 인덱스에 인형이 있는지 확인한다.

2) 0이라면, 다음 리스트를 확인한다.

3) 인형이 있었다면, basket에 넣어주고 basket의 원소 크기가 1보다 크다면 상위 2개의 인형을 확인한다.

2-2. 내 코드 1 -> 틀림

from collections import deque
def solution(board, moves):
    answer = 0
    basket = deque([])

    for loc in moves:
        for row in board:
            if row[loc-1] == 0:
                continue
            else:
                doll = row[loc-1]   # 0으로 만들기
                row[loc-1] = 0

                if len(basket) > 1:
                    cmp = basket.pop()      # pop인데 popleft라고 해버리기...
                    if cmp == doll:
                        answer += 2
                    else:
                        basket.append(cmp)
                        basket.append(doll)
                else:
                    basket.append(doll)
                    break

    return answer

 

2-3. 내 코드 2 -> 맞춤

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

    for loc in moves:
        for row in board:
            if row[loc-1] == 0:
                continue
            else:
                basket.append(row[loc-1])   # 넣어주고 0으로 만들기
                row[loc-1] = 0
                if len(basket) > 1:     
                    if basket[-1] == basket[-2]:
                        answer += 2
                        basket.pop()
                        basket.pop()
                break       # loc을 바꿀 차례

    return answer

이전 코드에서 크게 고친 부분은 없다. 

deque 자료형을 이용한걸 그냥 리스트로 바꿔주고, pop 하지 않고 비교할 수 있게 basket[-1] basket[-2]로 바꿔줬다.

아래와 같이 바꾸면 row를 셀 필요가 없어서 그것도 바꿔줌

...왜 첫번째꺼가 틀렸지..?

 

3. 피드백

deque 자료형 사용하면서 stack의 성질(LIFO)이니까 pop을 해줘야하는데 popleft를 써줌

basket에서 -1 -2 인덱스 확인하는 부분을 else문에 넣어줬으면 continue처리 된 후에 거치지 않아도 되는데,

굳이 for문 밖으로 빼줘서 continue된 애들도 basket 맨위, 다음수를 확인하게 됨

 

 

 

왜 쉽나 했더니 level1이었다.

반응형
Comments