문제 링크
내 풀이
import numpy as np
def solution(board, moves):
a = np.transpose(board)
a = a.tolist()
dolls = []
count = 0
for move in moves:
for doll in a[move-1]:
if doll != 0:
a[move-1].remove(doll)
if dolls:
if dolls[-1] != doll:
dolls.append(doll)
break
else:
dolls.pop()
count += 2
break
else:
dolls.append(doll)
break
return count
다른 풀이
def solution(board, moves):
basket = [] # 바구니를 나타내는 리스트
result = 0 # 터트려진 인형의 개수를 나타내는 변수
for move in moves: # moves 배열에 있는 움직임을 하나씩 반복
for y, row in enumerate(board): # board의 행과 인덱스를 동시에 반복
# 만약 현재 위치에 인형이 있다면
if row[move-1] != 0:
# 바구니가 비어있지 않고, 가장 위에 있는 인형과 현재 인형이 같다면
if basket and row[move-1] == basket[-1]:
result += 2 # 터트려진 인형 개수를 2 증가시키고
del basket[-1] # 바구니에서 가장 위에 있는 인형을 제거
else: # 바구니가 비어있거나 현재 인형과 가장 위에 있는 인형이 다르다면
basket.append(row[move-1]) # 현재 인형을 바구니에 추가
board[y][move-1] = 0 # board에서 현재 위치의 인형을 없애기 위해 0으로 설정
break # 현재 움직임을 처리했으므로 반복문 종료
return result # 터트려진 인형의 총 개수 반환
출처: https://1ets-just-do-it.tistory.com/92 [파이썬은 신이야🔥🔥🔥:티스토리]
풀이 해석
- board를 enumerate를 통해 행과 인덱스를 반복하여 탐색을 진행하였고
특정 move열에 인형을 찾을 경우 다양하게 대처하는 코드를 세웠다
배울 점
- 배열을 위에서부터 탐색해나가며 인형을 찾는 사고
- 뽑아간 인형은 board[y][move-1] = 0 으로 설정하는 사고
댓글남기기