[프로그래머스 / lv.1] 크레인 인형뽑기 게임
in Problem Solving on Programers
날짜: 2021년 5월 30일
소요 시간: 58분 24초
카테고리: 수학 문제
태그: 레벨1
, 파이썬
입출력 예시
board | moves | result |
---|---|---|
[[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 |
내가 적은 코드
def solution(board, moves):
arr = []
answer = 0
for i in moves:
for j in range(len(board)):
if board[j][i-1] != 0:
arr.append(board[j][i-1])
board[j][i-1] = 0
if len(arr) > 1 and arr[-1] == arr[-2]:
arr.pop(-1)
arr.pop(-1)
answer += 2
break
return answer
풀이 과정
i
는 크레인이 움직인 행을 의미한다.(배열의 첫번째가 0으로 시작하므로 -1을 해준다.)
j는 board의 열을 의미한다.
그래서 0이 아닌 그러니까 인형이 존재하는 칸을 만났을 때 그 원소를 0으로 치환하고 그 값은 arr
에 담는다.
만약 arr
의 맨 뒤의 두 원소가 같을 때 두 개의 원소를 pop
하고 결과 값에 2를 더한다.
그럼 마지막에는 사라진 인형의 개수가 answer
에 저장된다.
베스트 코드
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
반성
- 이제 레벨 1정도의 브루트 포스 알고리즘의 로직은 어느정도 구현할 수 있는 것 같다.
- 구현 단계에서 파이썬의 기본적인 문법에 대한 이해도가 낮아서 리스트 슬라이싱이라던지 자료형이라던지에서의 실수가 잦다.