728x90

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

# 접근 방법

  • 주어진 조건에 맞게 함수를 완성시켜야한다.
  • 같은 인형이 바구니에 들어온다면 터트려 주고 총 터진 인형의 수를 반환 해주는 문제이다.
  • 2중 리스트이므로 전치행렬을 이용하여 구할수도 있지만, 나는 반복문 내에서 행과 열의 인덱스 번호를 반대로 적어주며 풀었다.
  • 스택을 이용하여 LIFO 구조로 제일 위에 인형만 비교해주고 출고 시켜주었다.

 

# 0은 빈칸
# 1~100은 각기 다른 인형
# 크레인은 멈춘 위치에서 가장 위에 있는 인형을 옮긴다.
# 같은 모양 인형이 쌓인다면 펑!
# 터진 인형의 개수 반환


def solution(board, moves):
    answer = 0
    # 결과 담아줄 리스트
    result = []
    
    for i in moves:    
        for j in range(len(board)):
            
            # 2차원배열이라 아래로 쌓이지만 인형뽑기는 1열이 첫줄이다.
            # (열 고정, 행 움직임)으로 구해준다.
            # 또한 인형뽑기가 1부터 시작하므로 -1을 해주어야 인덱스번호와 동일하다.
            if board[j][i-1] != 0:
                
                # 인형이 들어있고 바구니 제일 위에 똑같은 인형이 들어있다면
                # 빼주고 +2
                if len(result) > 0 and result[-1] == board[j][i-1]:
                    result.pop()
                    answer += 2
                # 아니라면 담아준다.
                else:
                    result.append(board[j][i-1])
                # 인형뺀거 기록
                board[j][i - 1] = 0
                break



    return answer
728x90