기록
[Python] 크레인 인형뽑기 게임 본문
반응형
programmers.co.kr/learn/courses/30/lessons/64061
def solution(board, moves):
answer = 0
doll = []
for m in moves:
for b in board:
if b[m-1] == 0:
continue
else:
doll.append(b[m-1])
b[m-1] = 0
break
if len(doll) >= 2:
if doll[-1] == doll[-2]:
doll.pop()
doll.pop()
answer += 2
return answer
board라는 이차원 리스트를 moves에 들어있는 값을 '열'로 삼아 순차적으로 board 끝까지 검사해야해요.
그래서 board를 b라는 이름으로 한 행마다 가져와서 해당 행의 m-1 열을 검사했습니다.
b[m-1] == 0이면 다음 행으로 넘어가고, 아닐 시에는 doll이라는 이름의 리스트(Stack 역할)에 값을 넣어주고 board 행 검사를 멈춥니다.
doll 리스트에 인형이 두 개 이상 존재할 때는 방금 추가된 인형과 인접한 인형이 같은지 검사합니다.
같으면 두 인형을 제거하고, answer의 값을 2만큼 올려주면 되겠죠?
def solution(board, moves):
answer = 0
stack = []
for i in moves:
for j in range(len(board)):
if board[j][i-1] != 0:
stack.append(board[j][i-1])
board[j][i-1] = 0
if len(stack) > 1:
if stack[-1] == stack[-2]:
stack.pop()
stack.pop()
answer += 2
break
return answer
비슷한 풀이
def solution(board, moves):
moved = []
answer = 0
for m in moves:
for i in range(len(board)):
c = m-1
if board[i][c] != 0:
doll = board[i][c]
board[i][c] = 0
if len(moved) == 0:
moved.append(doll)
elif len(moved) > 0 and doll != moved[-1]:
moved.append(doll)
else:
answer += 1
del moved[-1]
break
return answer*2
moved 리스트의 길이가 1 이상이면 뽑은 인형을 바로 moved에 넣지 않고
moved의 맨 마지막 값(top)과 비교해서 del (pop) 연산을 1회만 수행하게 하는 코드입니다.
반응형
'[Study] > 코딩테스트 연습' 카테고리의 다른 글
[Python] 키패드 누르기 (0) | 2020.11.10 |
---|---|
[Python] 실패율 (0) | 2020.11.09 |
[Python] 3진법 뒤집기 (0) | 2020.11.07 |
[Python] 비밀지도 (0) | 2020.11.07 |
[Python] 다트 게임 (0) | 2020.11.07 |