문제
풀이
파란색 보드는 초록색 모드의 행과 열을 서로 바꿔서 생각하면 같은 보드입니다.
저는 초록색 보드를 클래스로 구현한 뒤 파란색 보드는 같은 클래스를 사용했습니다.
빨간색 칸에 블록을 놓는 것을 초록색 보드의 0행에 놓고 떨어뜨리는 것으로 생각합시다. 세로 블록은 한 칸 짜리 블록을 두 번 떨어뜨리는 것으로 생각해도 됩니다.
블록을 최대한 떨어뜨린 다음 점수를 계산하여 꽉 찬 행은 비우고 아래로 한 칸 잡아당겨 줍시다.
이는 문제 본문의 맨 마지막 부분에 의한 순서입니다.
행이나 열이 타일로 가득찬 경우와 연한 칸에 블록이 있는 경우가 동시에 발생할 수 있다. 이 경우에는 행이나 열이 타일로 가득 찬 경우가 없을 때까지 점수를 획득하는 과정이 모두 진행된 후, 연한 칸에 블록이 있는 경우를 처리해야 한다.
그럼에도 불구하고 0행 또는 1행에 블록이 있다면 맨 아래 블록을 지우고 잡아당겨주면 됩니다.
코드
1 | |