문제1724--변형 테트리스

1724: 변형 테트리스

[만든사람 : ]
시간제한 : 1.000 sec  메모리제한 : 128 MB  제출 : 2  맞은 사람 : 1

제출  

문제 설명

테트리스(Tetris)는 C열과 무제한 행으로 구성된 필드에서 즐기는 인기 있는 컴퓨터 게임이다. 한 번 움직일 때, 다음의 일곱 조각 중 하나를 필드에 떨어뜨릴 수 있다.
플레이어는 블록이 바닥에 떨어지지 전까지 90도, 180도, 270도 회전시킬 수 있으며, 왼쪽 또는 오른쪽으로 움직일 수 있다. 여기서 블록은 필드를 벗어나지 않는다. 그리고 나서 그 블록은 필드 바닥이나 이미 만들어져 있는 블록들 위에 놓여지게 된다.
충근이 버전 변형 테트리스는 일반적인 테트리스와 약간 규칙이 다르다. 블록이 떨어졌을 때, 블록과 블록 또는 블록과 바닥 사이에 채워져있지 않은 칸이 생기면 안 된다.
예를 들어, 아래와 같이 각 칸의 높이가 2, 1, 1, 1, 0, 1인 경우를 생각해보자. 블록 5번을 떨어뜨리는 방법은 아래와 같이 다섯가지이다.

테트리스 필드의 각 칸의 높이와 떨어뜨려야 하는 블록의 번호가 주어진다. 이때, 블록을 놓는 서로 다른 방법의 수를 구하는 프로그램을 작성하시오.

입력 설명

첫째 줄에는 C와 떨어뜨리는 블록의 번호 P가 주어진다. (1 ≤ C ≤ 100, 1 ≤ P ≤ 7)
둘째 줄에는 각 칸의 높이가 주어진다. 높이는 0보다 크거나 같고, 100보다 작거나 같은 자연수이다.

출력 설명

첫째 줄에 블록을 떨어뜨리는 방법의 수를 출력한다.

입력 예시1 Copy

6 5
2 1 1 1 0 1

출력 예시1 Copy

5

입력 예시2 Copy

5 1
0 0 0 0 0

출력 예시2 Copy

7

입력 예시3 Copy

9 4
4 3 5 4 6 5 7 6 6

출력 예시3 Copy

1

출처/분류