아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Frogger

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

요약
차량이 좌우로 번갈아 움직이며 끝에서 되돌아오는 다차선 도로에서 개구리가 한쪽 갓길에서 반대쪽 갓길까지 건너는 최소 턴 수를 구한다. 개구리와 차량은 동시에 움직인다.
난이도

보통10점 중 6점

유형
BFS, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

Frogger는 SEGA가 1981년에 선보인, 초창기에 크게 유행한 아케이드 게임 중 하나입니다. 목표는 개구리가 자동차에 치이지 않고 여러 차선으로 이루어진 도로를 건너도록 돕는 것입니다.

nn개의 차선으로 이루어진 도로가 주어집니다. 각 차선은 mm개의 칸으로 된 한 줄이며, 각 칸은 비어 있거나 자동차 한 대가 놓여 있습니다. 도로의 양쪽 끝에는 연석(curb)이 있어 개구리가 자유롭게 움직일 수 있고, 차선 안에서는 자동차가 없는 칸에만 있을 수 있습니다.

자동차의 진행 방향은 차선마다 번갈아 바뀝니다. 개구리의 출발 연석과 가장 가까운 차선의 자동차는 오른쪽으로, 그다음 차선은 왼쪽으로, 이런 식으로 교대로 이동합니다. 자동차는 차선을 바꾸지 않고 매 턴 정확히 한 칸씩 전진합니다. 교통 흐름을 유지하기 위해, 차선의 한쪽 끝을 벗어나는 자동차는 같은 차선의 반대쪽 끝에서 다시 나타납니다(차선은 순환합니다).

한 턴 동안 모든 자동차는 지정된 방향으로 한 칸씩 이동하고, 개구리는 다음 중 하나를 정확히 한 번 수행합니다: 왼쪽으로 한 칸, 오른쪽으로 한 칸, 위나 아래로 한 칸(두 차선 사이, 또는 연석과 인접한 차선 사이) 이동, 또는 제자리에 머무르기. 자동차와 달리 개구리는 순환할 수 없어, 차선이나 연석의 첫 칸과 마지막 칸 사이를 한 번에 건널 수 없습니다.

개구리와 자동차는 동시에 움직입니다. 따라서 개구리는 이번 턴의 이동이 끝난 뒤 자동차가 없게 될 칸으로만 들어갈 수 있습니다. 이동을 마친 뒤 개구리가 자동차와 같은 칸에 있게 되면 치여서 죽습니다. 이동이 동시에 일어나므로, 같은 차선에서 자신을 향해 다가오는 자동차는 안전하게 뛰어넘을 수 있습니다(개구리와 그 자동차가 서로 칸을 맞바꾸는 셈입니다).

개구리가 한쪽 연석의 출발 칸에서 반대편 연석의 목적지 칸까지 이동하는 데 필요한 최소 턴 수를 구하거나, 주어진 라운드 수 안에 불가능함을 판별하세요.

입력

첫 줄에는 시나리오의 수가 주어집니다.

각 시나리오는 사용할 수 있는 최대 라운드 수를 나타내는 양의 정수 xx (x≤105x \le 10^5)가 적힌 줄로 시작합니다. 다음 줄에는 차선의 수 nn (1≤n≤201 \le n \le 20)과 각 차선의 길이 mm (1≤m≤501 \le m \le 50)이 주어집니다.

이어지는 n+2n + 2개의 줄에는 각각 mm개의 문자로 된 문자열이 있습니다.

  • X는 자동차,
  • O(알파벳 O)는 빈 칸,
  • F는 개구리의 출발 칸,
  • G는 개구리의 목적지 칸입니다.

이 중 첫 줄은 목적지 연석으로, O들과 정확히 하나의 G로 이루어집니다. 마지막 줄은 출발 연석으로, O들과 정확히 하나의 F로 이루어집니다. 그 사이의 nn개 줄은 각각 도로의 한 차선을 나타냅니다.

출력

각 시나리오마다 한 줄을 출력합니다.

허용된 라운드 수 안에 개구리가 목적지에 도달할 수 있으면 The minimum number of turns is K.를 정확히 출력합니다. 여기서 K는 최소 턴 수입니다. 그렇지 않으면 The problem has no solution.을 정확히 출력합니다.

예제1

  1. 예제 1

    입력
    2
    10
    4 4
    OOGO
    XXOO
    XOOX
    XXOO
    XXOO
    OOFO
    2
    2 2
    OG
    XX
    OO
    FO
    
    예상 출력
    The minimum number of turns is 9.
    The problem has no solution.