티스토리 뷰

728x90

문제

https://programmers.co.kr/learn/courses/30/lessons/17679

애니팡 같은 게임인데, 가로 세로 2*2 똑같은 문자가 있으면 팡 하고 사라짐.

사라진 빈 공간으로 위에 있던 블럭들이 위 -> 아래 방향으로 떨어진다.

세로 m, 가로 n, 보드 board 3개가 주어지고

지워지는 블록이 몇개인지 return 하는 문제.


접근방법

1. shift하기 좋게 array 재구성

팡 터질 때 위에 있는 블록이 아래로 내려가야 하는 shift 작업이 필요한데, 입력받은 배열은


1 2 3

4 5 6

7 8 9

아래

요런식으로 되어 있기 때문에, 위에어 아래로 떨어질려면 한 array에서 다른 array로 이동시켜주는 작업을 해줘야 하기 때문에, 복잡하기도 하고 오류가 날 수도 있기 때문에 배열 모양을 다르게 바꿔줬다.

아래 7 4 1

아래 8 5 2 위

아래 9 6 3

요런식으로 바꿔주게 되면, 만약 4가 삭제가 된다면 741 array의 첫번째 idx 값만 remove 해주면 자연스럽게 위에 있는 블록이 shift 되기 때문에 오류가 날 확률이 적다고 생각했기 때문이다.


2. 한번에 팡 터기지

한 턴당 한번에 팡 터져야 한다. 그렇기 떄문에 터트려야 할 값을 발견할 때마다 터트리는 방식이 아닌 idx 값만 저장해뒀다가, 한꺼번에 팡 터트리도록 했다.

터트릴 idx값을 내림차순으로 하여 idx 꼬임이 없도록 했다. idx값이 1 차이날때 안날때도 구분지어줬다.


솔직히 요렇게 짯을 때 효율성이 별로라 생각했었는데 속도도 빨랏고 통과했다.


코드

728x90
댓글