숫자를 채웠으니 진행 방향으로 이동해야 합니다. 진행 방향은 d 변수에 저장되어 있으므로 다음 위치는 코드처럼 계산할 수 있습니다.
int nx = x + dx[d];
int ny = y + dy[d];
여기에서 잊지 말아야 할 점은 더 이상 진행할 수 없을 때의 처리를 해야 한다는 것입니다. dx, dy를 이용하여 모든 방향에 적용할 수 있는 로직을 작성하고 있으므로 더 이상 진행할 수 없다는 것은 다음 코드로 검사할 수 있습니다.
if (nx == n || ny == n || nx == -1 || ny == -1 || triangle[ny][nx] != 0) {
}
아래 방향이나 오른쪽으로 진행할 때를 위한 nx == n || ny == n 조건이 있고, 왼쪽 위로 진행할 때를 위한 nx == -1 || ny == -1 조건이 있습니다. 또 이미 숫자가 써 있는 칸에 도달했음을 검사하는 triangle[ny][nx] != 0 조건이 있습니다.
이 조건에 걸리면 현재 진행 방향으로는 더 이상 진행할 수 없다는 의미입니다. 진행 방향을 바꾸어 주어야 합니다. 현재 dx, dy를 구성하는 방향은 아래 → 오른쪽 → 왼쪽 위 순서로 문제의 진행 방향과 같게 구성했습니다. 따라서 방향 변수 d의 값을 1 증가시키는 것으로 방향을 바꿀 수 있습니다. 또 방향 개수가 3개이므로 나머지 연산을 이용하여 왼쪽 위 방향에서 아래 방향으로 전환될 수 있게 합니다.
▲ 그림 3-15 방향 변수 d의 전환 과정