Development

[프로그래머스] 크레인 인형뽑기 게임 본문

코딩테스트/Python

[프로그래머스] 크레인 인형뽑기 게임

yo~og 2021. 8. 3. 17:59
반응형

내 코드

def solution(board, moves):
    
    answer = 0
    
    q = []
    l=0
    
    while True:
        if (len(moves)-1) == l:
            break
        for i in board:
            if (i[moves[l]-1]) !=0:
                q.append(i[moves[l]-1])
                i[moves[l]-1] = 0
                break
        l+=1
        while True:
            if len(q)>=2 and (q[len(q)-2] == q[len(q)-1]):
                answer+=2
                q.pop()
                q.pop()
            else:
                break
        
    return answer

카카오 문제!!! 카카오 문제들은 귀엽다..,, 문제에 카카오 캐릭터들이 나온다...,,ㅠㅠ 문제 푸는데는 별로 시간이 안걸렸는데.. 멍때리면서 풀다가 len(q)를 len으로만 적어놔서 계속 오류가 뜬걸 못찾고있었다 휴 ㅠ 바본가 진짜..

 

근데 지금 코드 보는데.. 비효율적이게 푼거같다!!

일단 설명하면서 말해야겠다ㅠ

1. l이 moves끝에 다다르면 while문이 끝나게한다. 이건 그냥 for문으로 적는게 더 좋았을거같다.

2. 그리고 board의 리스트들을 가져오면서 moves[l]-1의 위치에 있는 리스트가 0이 아닐때까지 for문을 돌린다. 0이 아닌 것이 나오면 q에 append하고 인형을 뽑은 상태가 되었으므로 리스트의 원소를 0으로 바꾼다.

3. 그다음 while문을 돌려 q를 확인한다. 여기서는 q의 마지막 숫자 2개가 같은지 확인하고 같으면 답에 2를 더하고 pop을 시켜주었다. while문 안돌려도 되는데.. 풀때 한번 pop을해도 테트리스처럼 또 같은게 나올수도 있다고 생각해서 while문을 돌렸다.. 아쉽다ㅠㅠ 

 

아쉬움이 많이 남는 코드이다..,, 쩝,,,,

 

다른사람 코드

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

다른사람 코드이다!

푼 알고리즘은 비슷한거같다.. 위에서 아쉽다고 한 부분 고치면 완전 비슷해질듯??

stacklist[-1]하면 가장 마지막 원소가 나온다는 것도 외워야겠다!!! 

반응형
Comments