[programmers] 당구 연습

https://school.programmers.co.kr/learn/courses/30/lessons/169198

class Solution {
    public int[] solution(int m, int n, int startX, int startY, int[][] balls) {
        int[] answer = new int[balls.length];

        for (int i = 0; i < balls.length; i++) {
            int targetX = balls[i][0];
            int targetY = balls[i][1];
            int minDist = Integer.MAX_VALUE;

            // 4방향 벽 반사 좌표
            // 1. 좌측 벽 기준 반사
            if (!(startY == targetY && startX > targetX)) {
                int dx = -targetX - startX;
                int dy = targetY - startY;
                minDist = Math.min(minDist, dx * dx + dy * dy);
            }

            // 2. 우측 벽 기준 반사
            if (!(startY == targetY && startX < targetX)) {
                int dx = (2 * m - targetX - startX);
                int dy = targetY - startY;
                minDist = Math.min(minDist, dx * dx + dy * dy);
            }

            // 3. 하단 벽 기준 반사
            if (!(startX == targetX && startY > targetY)) {
                int dx = targetX - startX;
                int dy = -targetY - startY;
                minDist = Math.min(minDist, dx * dx + dy * dy);
            }

            // 4. 상단 벽 기준 반사
            if (!(startX == targetX && startY < targetY)) {
                int dx = targetX - startX;
                int dy = (2 * n - targetY - startY);
                minDist = Math.min(minDist, dx * dx + dy * dy);
            }

            answer[i] = minDist;
        }

        return answer;
    }
}


© 2023 Lee. All rights reserved.