PROGRAMMERS Python Lv1. 크레인 인형 뽑기

1 분 소요

이번 문제는 크레인 인형 뽑기입니다.

이 문제는 정답을 맞추지 못해 구글링으로 정답 코드를 보고

분석해보았습니다.

def solution(board, moves):
    moved = []
    count = 0
    for x in moves:
        for i in range(len(board)):
            c = x-1   
            if board[i][c] != 0:
                got = board[i][c]
                board[i][c] = 0
                if len(moved) == 0:
                    moved.append(got)
                elif len(moved) > 0 and got != moved[-1]:
                    moved.append(got)
                else:
                    count += 1
                    del moved[-1]
                break
    return count*2
  1. 인형이 옮겨질 리스트 moved를 생성
    moved = []
    
  2. 결과로 return 할 변수 count 설정
    count = 0
    
  3. for 문을 통해 board리스트에 접근
    c = x - 1
    

이 부분은 moves가 1번부터 할당이 되어 있지만 이는 index로 생각했을 때

0부터 시작하기에 모든 moves를 -1씩 해주어야 한다.

  1. if 문을 통해 인형이 있는 것과 없는 것을 구분해주고

이를 기존에 설정한 moved 리스트에 append 시켜준다.

if board[i][c] != 0:
    got = board[i][c]
    board[i][c] = 0
    if len(moved) == 0:
        moved.append(got)
  1. 다음의 elif 문은 moved 리스트에 인형이 담겨있고,

담겨있는 인형과 다른 인형이 담길 경우 똑같이 append 해주는 코드이다.

elif len(moved)> 0  and got != moved[-1]:
    moved.append(got)
  1. 중요한 것은 위의 if문들을 충족하지 못한다면

마지막으로 담겨있던 인형과 똑같은 인형이 담길

상황이기에 moved[-1]을 제거하고 count를 해준다.

else:
    count += 1
    del moved[-1]
break
  1. 마지막으로 인형은 2개씩 삭제되므로 count의 2배를 해주면 답이 나온다.

혹시 제 풀이에 오류가 있거나

더 좋은 방법이 있다면 댓글 남겨주시면 감사드립니다.

댓글남기기