떨어지는 블록 게임

시간 제한1초메모리 제한512 MB

요약
일곱 가지 테트로미노를 주머니 방식으로 섞어 내려보내는 단순화한 테트리스 게임에서, 각 조각을 어디에 놓아야 한 줄 이상을 완성하고 게임에서 이길 수 있는지 판단하는 문제입니다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 그리디, 백트래킹, 구현
정답자
아직 제출이 없습니다

문제

이 문제에서는 테트리스 게임을 위한 간단한 AI를 프로그래밍해야 한다. 목표는 간단하다: 최소한 하나의 가로줄을 완성하는 것이다. 구체적으로, 이 문제에서는 다음 수정된 규칙에 따라 테트리스를 플레이한다:

그림 G.1: 초기 방향의 일곱 가지 테트로미노.

  • 플레이 영역은 높이 20, 너비 10인 격자이며, 처음에는 비어 있다.

  • 게임은 무작위 순서의 테트로미노 조각을 하나씩 플레이어에게 제시한다(그림 G.1). 이를 위해 게임은 가방 무작위화를 사용한다. 즉, 처음 일곱 조각은 모두 서로 다르고, 그다음 일곱 조각도 서로 다르며, 이런 식으로 이어진다.

  • 플레이어는 각 조각을 옆으로 이동하고 90도의 배수만큼 회전할 수 있다. 이러한 조정은 격자 위에서 이루어진다.

  • 그런 다음 조각은 플레이 영역으로 떨어지고, 이전 조각의 일부가 가로막아 더 이상 떨어질 수 없는 부분이 생기는 즉시 고정된다. 떨어지는 동안 조각을 이동하거나 회전하는 것은 불가능하다.

  • 다음 중 하나가 발생하면 게임이 끝난다:

    • 격자의 가로줄이 테트로미노 타일로 완전히 채워지면 플레이어가 이긴다.
    • 어떤 조각이 격자 안으로 완전히 떨어지지 않으면 플레이어가 진다.

힌트

그림 G.2: 예시 상호작용의 그림.

예제1

  1. 예제 1

    입력
    S
    
    O
    
    T
    
    J
    
    I
    
    W
    
    예상 출력
    1 1
    
    2 4
    
    2 2
    
    3 9
    
    0 6