Problem : 드래곤 커브
유형 : 구현
문제, 예제 입출력 설명
해결 전략
커브가 움직인 위치는, 좌표로 표시할 수 있다.
드래곤 커브의 다음 세대는, 이전 세대의 영향을 받는다.
90도씩 돌아간뒤, 끝점에 이어붙이는것은 이전에 움직인 것에서의 역방향인걸 알 수 있다.좀더 자세히 이야기를 해보자면
오른쪽
방향을 90도 돌린다면아래쪽
방향이 될것이다.- 하지만, 그것을 우측 방향으로 이동한것의 끝에 이어 붙이면
- 끝을 기준으로는
아래쪽
이 아니라 위쪽으로 진행한다는 것을 알 수 있다.
이전에 이동 방향이 0이었다면,
다음에 이동할 방향은
이동을 완료한 위치에서 “이전에 이동한 방향의 다음 방향이다”
즉 0방향으로 움직인 곳부터, 1방향으로 움직인다.만약
총 0 1 방향으로 움직였다면, 다음에 움직이는 경로는
0 1 방향으로 움직이고 이동을 마친 위치부터
2 1 방향으로 움직인다.왜
2 1 이냐면
(0 1)
1 에서 다음 방향인 2 이고
0 에서 다음 방향인 1 이다.돌린 다음. 끝 부분에 붙이는 것이기 때문에
가장 마지막에 이동한 방향
에 영향 받으므로
역순으로 탐색해야 한다.그 다음 세대는
0 1 2 1 이었으니
2 3 2 1 이 된다.
주의할 점
- 이동 했던 방향을 보관하고 있는
vector
에 새로운 방향을 추가할때 주의해야한다. - 처음에 지금까지 이동 방향이 몇개 있는지를 미리 찾아두고
- 담겨있는 방향을 역순으로 탐색하면서, 새로운 방향을 추가해야한다.
- 이때 추가된 새로운 방향들은, 다음 세대 드래곤 커브때 이용된다.
- 즉, 현재 진행하고 있는 과정에는 필요가 없으므로 지금까지의 이동방향을 미리 찾아둔 것이다
풀이
드래곤 커브 첫세대를 관리한다
- 시작점을 표시하고
- 방향에 맞춰 이동한뒤 해당 지점에도 표시한다
- 그리고, 이동방향을 벡터에 넣어둔다.
드래곤 커브를 진행한다
- 현재 들어가있는 방향의 개수를 미리 세어두고
- 방향의 개수만큼, 역방향 으로 찾아간다
가장 마지막에 이동한 방향부터 탐색
- 이전 방향에 따라서, 이어서 뻗어나갈 다음 방향의 좌표를 구한다
코드
1 |
|
피드백
연관 관계를 찾고, 변경되어지는 규칙을 찾아보자