후기

내용

이번 문제는 처음에는 입사각과 반사각이 같다는 조건을 실제 각도로 계산해야 한다고 생각했었다.

그래서 벡터를 이용해서 반사되는 지점을 직접 구해야 하나 고민했었는데, 풀이를 진행하면서 굳이 반사 지점을 직접 구할 필요가 없다는 것을 알게 되었었다.

핵심은 당구대를 기준으로 목표 공을 대칭 이동시키면 꺾여 있던 원쿠션 경로를 하나의 직선으로 펼칠 수 있다는 것이었다.

예를 들어 위쪽 벽에 맞고 목표 공으로 이동한다고 하면 실제 경로는 다음과 같다.

────────────── P ────────────── 위쪽 벽
             / \
            /   \
         시작    목표 공

여기서 목표 공을 위쪽 벽 너머로 똑같은 거리만큼 대칭시키면 다음처럼 생각할 수 있었다.

             대칭된 목표 공
                  ●
                 /
────────────── P ──────────────
               /
              /
           시작 공

그러면

시작 → 벽 → 목표 공

이라는 꺾인 경로가

시작 → 대칭된 목표 공

이라는 하나의 직선으로 변한다.

따라서 반사점 P의 좌표나 실제 입사각을 직접 계산할 필요 없이, 대칭된 목표 공과 시작 공의 거리의 제곱만 계산하면 되었다.


1. 네 방향으로 목표 공을 대칭시켰었다

당구대의 크기가 m × n이고 목표 공이

ball = (x, y)

에 있다면 네 방향 대칭점은 다음과 같았다.