[프로그래머스] 🎱당구 연습

Chobby·2024년 1월 25일
1

Programmers

목록 보기
318/349

😀문제

  1. 피타고라스 공식 활용 A^2 + B^2 = C^2C가 가장 긴 변
  2. 튕겨져 나오는 궤적은 쿠션을 연장했을 때 직선으로 놓는다 생각함

    우린 노란 선분의 길이는 모두 구할 수 있으며, 적색 선분과 파란 선분의 길이는 동일함
    즉, 위 그림에서 윗 쿠션의 Y좌표 - A의 Y좌표 + 윗 쿠션의 Y좌표 - [0]의 Y좌표 의 제곱과 [0]의 X좌표 - A의 X좌표의 제곱을 더하면 파란선분의 제곱 값을 알 수 있다. 즉 구하고자 하는 거리
  3. 입출력 예#1의 두 번째 예시를 보면, 공끼리 벽에 닿기 전에 만나면 안된다.

    점 A에 놓인 공을 왼쪽 방향으로 x축과 수평이 되도록 보내면 벽에 맞고 점 [1]에 닿아 이동 거리가 더 짧아보이지만, A가 벽으로 이동하는 경로에 점 [1]이 있으므로, 벽에 맞기전에 공에 먼저 맞게 됩니다.

😎풀이

function solution(m, n, startX, startY, balls) {
    function nearestBoundaryDistance(targetCoords) {
        const [targetX, targetY] = targetCoords
        const left = startY === targetY && startX > targetX ? Number.MAX_SAFE_INTEGER : Math.pow(startX+targetX, 2) + Math.pow(startY-targetY, 2)
        const right = startY === targetY && startX < targetX ? Number.MAX_SAFE_INTEGER : Math.pow((m-startX) + (m-targetX), 2) + Math.pow(startY-targetY, 2)
        const top = startX === targetX && startY < targetY ? Number.MAX_SAFE_INTEGER : Math.pow((n-startY) + (n-targetY), 2) + Math.pow(startX-targetX, 2)
        const bottom = startX === targetX && startY > targetY ? Number.MAX_SAFE_INTEGER : Math.pow(startY+targetY, 2) + Math.pow(startX-targetX, 2)
        return Math.min(left,right,top,bottom)
    }
    return balls.map(nearestBoundaryDistance)
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글