블록 모험
면접 대비시간 제한1초메모리 제한256 MB
기둥 높이들과 가방 속 블록 수, 허용 차이 k가 주어질 때 1번 기둥에서 n번 기둥까지 이동할 수 있는지 판별합니다.
문제
길동이는 Block Adventure라는 비디오 게임을 하고 있다. 한 줄로 늘어선 개의 열에 블록이 쌓여 있고, 열은 1번부터 번까지 번호가 붙어 있다. 모든 블록의 높이는 같다. 번 열의 높이 는 그 열에 쌓인 블록의 개수다.
길동이는 열의 맨 위에만 설 수 있는 캐릭터를 조작한다. 처음에 캐릭터는 1번 열의 맨 위에 서 있다. 목표는 캐릭터를 번 열의 맨 위로 옮기는 것이다.
캐릭터는 블록을 무한히 담을 수 있는 가방을 가지고 있다. 캐릭터가 번 열의 맨 위에 있을 때, 길동이는 다음 세 가지 행동을 원하는 만큼 할 수 있다.
- 열에 블록이 하나 이상 있으면, 맨 위의 블록을 하나 제거해 가방에 넣는다.
- 가방에 블록이 하나 이상 있으면, 가방에서 블록을 하나 꺼내 번 열의 맨 위에 올린다.
- 이고 이면, 캐릭터를 번 열의 맨 위로 옮긴다. 는 게임 시작 시 주어지는 음이 아닌 정수다. 캐릭터는 다음 열로만 이동할 수 있다.
앞의 두 행동에서는 캐릭터가 번 열에 머물고 가 바뀐다.
게임 시작 시 캐릭터의 가방에는 블록이 개 있다. 길동이가 게임에서 이길 수 있는지 구하라.
입력
첫 줄에 테스트 케이스의 개수 ()가 주어진다. 각 테스트 케이스가 이어진다.
각 테스트 케이스의 첫 줄에는 세 정수 , , (, , )가 주어진다. 은 열의 개수, 은 시작 시 가방에 있는 블록의 개수, 는 문제에서 설명한 값이다.
각 테스트 케이스의 둘째 줄에는 개의 정수가 주어진다. 번째 정수는 번 열의 초기 높이 ()이다.
출력
각 테스트 케이스마다 길동이가 게임에서 이길 수 있으면 YES를, 그렇지 않으면 NO를 출력한다. 대소문자는 어느 쪽이든 상관없다.
힌트
첫 번째 경우, 길동이는 1번 열에서 블록을 하나 가져와 2번 열로 이동한 뒤, 그 블록을 2번 열에 올려놓고 3번 열로 이동할 수 있다.
두 번째 경우, 길동이는 2번 열로 가려면 1번 열의 블록을 가방에 넣어야 한다. 그러나 이고 차이를 줄일 방법이 없으므로 3번 열로 갈 수 없다.
다섯 번째 경우, 캐릭터는 시작부터 이미 번 열에 있으므로 게임은 즉시 이긴 것이다.