X. 블럭 건너가기

View as PDF

Submit solution

Points: 10
Time limit: 2.0s
Memory limit: 64M

Author:
Problem type

CU크래프트는 월드가 2차원의 격자로 이루어진 게임이다. 격자의 칸에는 블럭이 놓여있을 수 있다.

이 게임의 주인공인 스티브는 매일 반복되는 채광에 지루해진 나머지 먼 곳으로 여행을 떠나기로 했다.

주인공이 가고자 하는 길은 위 그림처럼 표현할 수 있다. 이 그림에서는 열의 높이가 차례대로 4, 3, 5인 것을 나타내고 있다.

스티브는 첫 번째 열의 꼭대기에 서 있고, 오른쪽 열로 이동해 가면서 마지막 열의 꼭대기에 도달해야 한다.

단, 다음 열로 이동할 때는 높이의 차이가 1칸을 초과해서는 안 된다. 즉, 평평하거나 1칸을 오르내리는 높이만 이동할 수 있다.

위 그림에서는 높이가 4인 열에서 높이가 3인 열로 이동할 수 있지만, 높이가 5인 열로 이동할 수는 없다.

다행히도 스티브는 자신의 아래에 있는 블럭을 하나 집어들 수 있다. 블럭을 집은 상태에서는 더이상의 블럭을 집어올릴 수 없다. 집은 블럭은 언제든지 자신의 아래에 설치할 수 있다.

블럭을 집으면 1칸을 내려가는 셈이고, 블럭을 놓으면 1칸을 올라갈 수 있으니 이를 적절히 사용하면 다음 열로 이동이 가능해질 수 있다.

스티브가 할 수 있는 일의 선택지를 정리하면 다음과 같다:

  • 현재 열과 오른쪽 열의 높이 차이가 1 이하일 때, 오른쪽 열의 꼭대기로 이동한다.
  • 블럭을 들고있지 않을 때, 현재 열의 꼭대기에 있는 블럭 하나를 집어든다.
  • 블럭을 들고있을 때, 그 블럭을 현재 열의 꼭대기에 놓는다.

스티브는 처음에 블럭을 가지지 않은 채로 시작한다. 이 상황에서 스티브는 처음 열에서 출발해 마지막 열까지 도달할 수 있을까?

입력

  • 첫 번째 줄에 열의 개수 \(N\)이 주어진다.\((1 ≤ N ≤ 100,000)\)
  • 두 번째 줄부터 \(N\)개의 줄에 열의 높이가 주어진다.\((1 ≤ 높이 ≤ 100)\)

출력

  • 스티브가 마지막 열에 도달할 수 있으면 "YES", 그렇지 않으면 "NO"를 따옴표 없이 대문자로 출력한다.

입력 예시 1

3
2
2
4

출력 예시 1

YES

예시 1 설명

첫 번째 열에서 블럭을 집고 두 번째 열에서 집어든 블럭을 놓고 마지막 열로 도달할 수 있다.

입력 예시 2

3
1
2
4

출력 예시 2

NO

입력 예시 3

6
3
2
1
3
1
3

출력 예시 3

YES

Comments

There are no comments at the moment.