프로그래머스 크레인 인형뽑기 코드 및 해설 (파이썬)
2021. 6. 1. 15:34ㆍalgorithm
반응형
https://programmers.co.kr/learn/courses/30/lessons/64061
answer에 인형이 터뜨러져 사라진 횟수를 저장합니다.
입력으로 주어진 board를 전치하여 transposed_board를 만들고, 각 행에 세로줄의 인형들이 올 수 있게 만들었습니다.
move에서 주어진 세로줄에 접근하여 차례로 아래로 내려가며(인덱스를 증가해가며) 인형이 있으면 그 위치의 값을 0으로 만들어 인형이 꺼내졌음을 표시합니다.
그 후 바구니가 비어있거나 바구니의 가장 위(가장 마지막)에 있는 인형이 현재 인형과 다른 경우 바구니에 인형을 넣고(리스트에 추가하고),
바구니의 마지막 인형이 현재 인형과 다른 경우는 인형이 터뜨려져야 하기 때문에 answer를 1 증가시키고, 마지막 인형도 없애줍니다.
해당 세로줄의 끝까지 갔는데 인형이 없는 경우는 아무 변화 없이 다음 move에서 주어진 세로줄에 접근합니다.
한 번 터뜨러질 때 인형 2개가 사라지므로, 모든 moves를 이행한 후 answer에 2를 곱한 값을 반환합니다.
def nonzero2list(tuples):
result = []
for t in tuples:
if t != 0:
result.append(t)
# 위에 있는 인형이 더 끝에 오도록
return result[::-1]
def solution(board, moves):
# 터뜨러져 사라진 횟수
answer = 0
# 각 세로줄의 인형들
dolls_per_line = list(map(nonzero2list, zip(*board)))
# 바구니
basket = []
for move in moves:
dolls = dolls_per_line[move-1]
# 인형이 있는 경우
if not dolls:
continue
doll = dolls.pop()
# 바구니가 비어있거나, 마지막으로 쌓인 인형이 현재 인형과 다른 경우
if basket == [] or basket[-1] != doll:
# 바구니에 인형을 넣음
basket.append(doll)
# 바구니의 마지막 인형이 현재 인형과 다른 경우
else:
# 터뜨러져 사라진 횟수 + 1
answer += 1
basket.pop()
# 터트러져 사라진 인형의 개수 = 터뜨러져 사라진 횟수 * 2
return answer * 2
반응형
'algorithm' 카테고리의 다른 글
프로그래머스 후보키 코드 및 해설 (파이썬) (0) | 2021.06.01 |
---|---|
프로그래머스 예상 대진표 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 완주하지 못한 선수 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 디스크 컨트롤러 코드 및 해설 (파이썬) (0) | 2021.06.01 |
프로그래머스 등굣길 코드 및 해설 (파이썬) (0) | 2021.06.01 |