알고리즘

이동근·2021년 2월 13일
0

알고리즘

목록 보기
4/19

게임사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴수 있습니다. 집어올린 인형은 바구니에 쌓이게 되는데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓일 수 있습니다. 집어올린 인형은 바구니에 쌓이게 되는데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 만약 같은 모양의 인형 두개가 연속으로 쌓이게 되면 두 인형은 터지면서 바구니에서 사라지게 됩니다.

크레인시 인형이 집어지지 않는 경우는 없으나, 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다.

게임화면의 격자의 상태가 담긴 2차원 배열의 board와 인형을 집기위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution함수를 완성해 주세요.

접근

stack을 사용해서 풀어야하는 문제이었다. 접근은 좋았으나 코드를 풀어내지 못하였다.

스택(stack)?

  • 데이터를 임시 저장할때 사용하는 자료구조로, 데이터의 입력과 출력 순서는 후입선출 방식이다.
  • 스택에 데이터를 넣는 작업을 'push'라고 하고, 스택에서 데이터를 넣는 작업을 'pop'라고 합니다.

이 방식으로 푸는 것이 제일 좋은 것 같았다.

코드

  1. stacklist = [] : 인형을 크레인으로 움직여서 담을 list인데 stack을 이용할 예정이라서 stacklist라고 지어 주었다.

  2. answer = 0 : stack에서 없어진 인형의 수를 return하기 위해 기본값'0'을 줘서 만들어 주었다.

3~4. i가 move의 수만큼 for loop를 돌리는 도중 board의 리스트의 길이만큼 j를 for loop를 사용할 것이다.

5~7. 만약 배열의 j행 i-1 열이 0이 아니라면 stacklist에 board[j][i-1]를 append를 해주고 0으로 바꿔준다.

  1. stacklist의 길이가 1 이상일때

9~10. 스택에 가장 마지막에 들어온 인형과 그 전의 인형이 같다면 pop두 번을 통해 stack에서 빼주고
11. answer에 2를 더해준다. 그후 break 후 return answer를 해주면 된다.

결과 확인



스택을 이용한 알고리즘을 처음 풀어봤는데 어떻게 접근해야하는 지 감이 잡히지 않았었다. 다른 분께서 푼 알고리즘을 보고 어떻게 접근하는지 알 것도 같다 다음에는 꼭 풀어야지!!

profile
하루하루 1cm 자라는 개발자

0개의 댓글