[programmers] 당구 연습
in Algorithm on Algorithm
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;
}
}