https://school.programmers.co.kr/learn/courses/30/lessons/169198
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 예시를 통해서 가로, 세로가 동일할 것이란 생각에 어떤 방향이든 동일한 최솟값을 가질 거 같아 구현해 보았지만 가로, 세로가 달라질 수 있기 때문에 틀렸음
먼저 아이디어가 떠올랐던 것이 y절편, x절편이었고 이후에 좀 더 생각해 보니 x, y축으로 반사하여 두 점의 길이를 구하면 그 값이 원쿠션의 길이였음
다만 가로, 세로 크기가 달라서 모든 면에 대해 반사한 점에 대한 길이를 구해주어야 함
또한 x 또는 y가 시작점과 같은 경우 조건에 따라 반사면을 제외하고 계산해야 함
- 문제 예시에도 나와있지만 이 경우에는 목표 공을 직선으로 치기 때문에 원쿠션 성립이 되지 않음
수학적 지식과 센스를 자주 사용했었다면 빠르게 풀 수 있었을 것 같음, 수학적 지식을 사용하는 것을 연습해야 함
function solution(m, n, startX, startY, balls) {
var answer = [];
balls.forEach((ball) => {
const [x, y] = ball;
let minLength = Infinity;
if(!(startY == y && startX > x)){
const width = startX - -x;
const height = startY - y;
minLength = Math.min(minLength, Math.pow(width, 2) + Math.pow(height, 2))
}
if(!(startY == y && startX < x)){
const width = startX - (2 * (m - x) + x);
const height = startY - y;
minLength = Math.min(minLength, Math.pow(width, 2) + Math.pow(height, 2))
}
if(!(startX == x && startY > y)){
const width = startX - x;
const height = startY - -y;
minLength = Math.min(minLength, Math.pow(width, 2) + Math.pow(height, 2))
}
if(!(startX == x && startY < y)){
const width = startX - x;
const height = startY - (2 * (n - y) + y);
minLength = Math.min(minLength, Math.pow(width, 2) + Math.pow(height, 2))
}
answer.push(minLength);
})
return answer;
}
'DEV > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 도넛과 막대 그래프 (0) | 2025.04.21 |
---|---|
[프로그래머스] 연속된 부분 수열의 합 (0) | 2025.04.20 |
[프로그래머스] 완전범죄 (0) | 2025.04.17 |
[프로그래머스] 요격 시스템 (0) | 2025.04.16 |
[프로그래머스] 충돌위험 찾기 (0) | 2025.04.15 |