1 분 소요

문제 링크

내 풀이

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 으로 설정하는 사고

댓글남기기