만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

마법의 BF 5

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

요약
행 방향과 열 방향 모두에서 동작하는 N×N 브레인퍽 격자를 작성합니다. 입력 셀들(최대 100개, 값은 50 이하)의 최댓값을 M0에 저장합니다.
난이도

어려움10점 중 8점

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

문제

John은 학교에서 많은 동아시아 언어의 글이 왼쪽에서 오른쪽으로 쓰일 수도 있고 위에서 아래로 쓰일 수도 있다는 것을 배웠다. 그는 한 텍스트를 두 방향으로 동시에 읽을 수 있게 쓸 수 있는지가 특히 궁금해졌다. John은 프로그래밍 수업 시간에도 이 문제를 계속 고민했고, 이제 행 단위로 (위에서 아래로, 왼쪽에서 오른쪽으로) 읽을 때와 열 단위로 (왼쪽에서 오른쪽으로, 위에서 아래로) 읽을 때 모두 과제를 푸는 코드를 작성하려 한다. 이를 위해 적합한 언어가 필요해서, 실험용으로 BF를 골랐다.

BF 프로그램의 메모리는 왼쪽에서 오른쪽으로 번호가 매겨진 셀 M0M_0, M1M_1, …\ldots로 이루어진 무한 배열 MM이다. 각 셀은 임의로 커질 수 있는 음이 아닌 정수를 담는다. 실행을 시작할 때 데이터 포인터는 가장 왼쪽 셀(M0M_0)을 가리킨다.

프로그램 실행은 첫 번째 명령에서 시작한다. 각 명령을 실행한 뒤 점프가 적용되지 않는 한 프로그램은 순서상 다음 명령으로 넘어간다. 명령은 총 여섯 가지이며, 각각 한 글자로 표시한다.

명령의미
>데이터 포인터를 오른쪽으로 한 셀 옮긴다.
<데이터 포인터가 가장 왼쪽 셀을 가리키고 있지 않으면 왼쪽으로 한 셀 옮긴다. 그렇지 않으면 아무것도 하지 않는다.
+데이터 포인터가 가리키는 셀의 값을 1 증가시킨다.
-데이터 포인터가 가리키는 셀의 값이 양수이면 1 감소시킨다. 그렇지 않으면 아무것도 하지 않는다.
[데이터 포인터가 가리키는 셀의 값이 0이면 대응하는 ] 기호로 앞쪽 점프한다. 그렇지 않으면 아무것도 하지 않는다.
]데이터 포인터가 가리키는 셀의 값이 0이 아니면 대응하는 [ 기호로 뒤쪽 점프한다. 그렇지 않으면 아무것도 하지 않는다.

아래에 나온 다섯 개의 과제를 해결하는 마법의 BF 프로그램을 작성하도록 John을 도와라.

각 과제의 해답으로 N×NN \times N 격자 형태의 BF 프로그램 코드를 제출하라. 단, 1≤N≤10001 \le N \le 1000이다. 행 단위로 읽을 때와 열 단위로 읽을 때 코드가 같을 필요는 없지만, 두 경우 모두 과제를 올바르게 풀어야 한다. 해답 텍스트에는 >, <, +, -, [, ] 문자만 쓸 수 있고, 격자를 빈틈없이 채워야 한다. 허용되는 모든 입력에 대해 코드는 명령을 1000만 개보다 많이 실행해서는 안 된다.

과제

과제: 셀 M0M_0은 0이거나, 그 뒤의 셀 하나 또는 연속된 여러 셀이 양의 정수를 담고 있고, 나머지 셀은 모두 0이다. 실행을 시작할 때 배열에 담긴 정수 중 가장 큰 값을 찾아 그 값을 셀 M0M_0에 써라. 답은 5050을 넘지 않으며, 입력 배열에서 0이 아닌 값을 담은 셀은 100100개를 넘지 않는다고 가정해도 된다. 실행이 끝났을 때 M0M_0 이외의 셀은 어떤 값을 담고 있어도 된다.

예제1

  1. 예제 1

    입력
    0
    
    예상 출력
    0