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