문제
정올이는 2D 게임을 제작중이다.
이 게임은 20x20 격자판에서 이루어지며, 사용되는 좌표는 (1,1)부터 (20,20) 이다.
주어진 임무는 캐릭터 또는 장애물을 만들고, 캐릭터를 이동하는 것이다.
여기서 캐릭터 또는 장애물을 모두 오브젝트로 취급하는데, 오브젝트는 고유 ID와 좌표 속성을 가진다.
오브젝트의 ID는 항상 고유하며 중복된 ID는 허용하지 않는다.
N개의 명령이 주어졌을 때, 처리된 결과를 출력하는 프로그램을 작성해야 한다.
명령 이름 종류:
create_player -> 캐릭터를 생성한다. 다음줄에 캐릭터의 ID와 생성될 위치 좌표가 주어진다.
생성에 성공한 경우 ID was created in (r,c) 를 출력한다.
move_player -> 캐릭터를 이동시킨다. 다음줄에 캐릭터의 ID와 이동방향이 주어진다. 이동방향은 (L,R,U,D) 중 하나이며 행,열 좌표계임을 유의.
이동에 성공한 경우 ID moved to (r,c) 를 출력한다.
create_obstacle -> 장애물을 생성한다. 다음줄에 장애물의 ID와 생성될 위치 좌표가 주어진다.
생성에 성공한 경우 "ID was created in (r,c)" 를 출력한다.
자세한 형식은 입출력 예시를 참조.
명령을 정상적으로 수행하지 못한 경우 예외를 일으켜서 예외이름을 출력한다.
예외 종류:
InvalidCoord -> 지도 범위를 넘거나 이미 오브젝트가 존재하는 곳으로 이동하려거나 생성하려고 하는 경우
InvalidID -> 유효하지 않은 ID로 명령을 내리거나, 이미 존재하는 ID로 오브젝트를 생성하려고 하는 경우
명령을 실행할 때 "명령 이름 Start" 를 출력하며 정상적으로 명령을 수행해서 끝낼 경우 "명령 이름 End" 를 출력한다.
예를 들어,
create_player
iasa 4,2
가 명령으로 주어지면,
정상적으로 수행한 경우는
create_player Start
iasa was created in (4,2)
create_player End
예외가 일어난 경우는
create_player Start
InvalidID 또는 InvalidCoord
를 출력한다.
입력되는 명령 이름은 항상 올바른 명령 이름이다. (명령 이름은 예외처리 필요 없음)
예제
5
create_player
happy 1 1
move_player
happy U
move_player
happy D
create_obstacle
ob1 1 1
move_player
happy U
create_player Start
happy was created in (1,1)
create_player End
move_player Start
InvalidCoord
move_player Start
happy moved to (2,1)
move_player End
create_obstacle Start
ob1 was created in (1,1)
create_obstacle End
move_player Start
InvalidCoord