PROGRAMMERS Python Lv1. 크레인 인형 뽑기
이번 문제는 크레인 인형 뽑기입니다.
이 문제는 정답을 맞추지 못해 구글링으로 정답 코드를 보고
분석해보았습니다.
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
- 인형이 옮겨질 리스트 moved를 생성
moved = []
- 결과로 return 할 변수 count 설정
count = 0
- for 문을 통해 board리스트에 접근
c = x - 1
이 부분은 moves가 1번부터 할당이 되어 있지만 이는 index로 생각했을 때
0부터 시작하기에 모든 moves를 -1씩 해주어야 한다.
- if 문을 통해 인형이 있는 것과 없는 것을 구분해주고
이를 기존에 설정한 moved 리스트에 append 시켜준다.
if board[i][c] != 0:
got = board[i][c]
board[i][c] = 0
if len(moved) == 0:
moved.append(got)
- 다음의 elif 문은 moved 리스트에 인형이 담겨있고,
담겨있는 인형과 다른 인형이 담길 경우 똑같이 append 해주는 코드이다.
elif len(moved)> 0 and got != moved[-1]:
moved.append(got)
- 중요한 것은 위의 if문들을 충족하지 못한다면
마지막으로 담겨있던 인형과 똑같은 인형이 담길
상황이기에 moved[-1]을 제거하고 count를 해준다.
else:
count += 1
del moved[-1]
break
- 마지막으로 인형은 2개씩 삭제되므로 count의 2배를 해주면 답이 나온다.
혹시 제 풀이에 오류가 있거나
더 좋은 방법이 있다면 댓글 남겨주시면 감사드립니다.
댓글남기기