728x90
반응형
🔗 Problem Link
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
❔Thinking
- 칠 당구공의 위치와 맞춰야 하는 당구공의 위치가 주어질 때, 한 번 이상의 쿠션으로 맞추는 최단 거리를 반환한다.
- 당구공이 벽에 맞을 경우, 입사각과 반사각은 같다. (모서리의 경우, 가는 경로 그대로 돌아온다.)
- 당구대의 가로 세로 크기는 1000 이하이며, 맞춰야 하는 당구공은 1000개 이하이다.
💻Solution
def solution(m,n,startX,startY,balls):
def dist_calc(x1,y1,x2,y2):
return (x1-x2)**2 + (y1-y2)**2
answer = []
for x,y in balls:
tmp_dist = []
# 왼쪽 벽
if not (startX >= x and startY == y):
tmp_dist.append(dist_calc(startX,startY,-x,y))
# 오른쪽 벽
if not (startX <= x and startY == y):
tmp_dist.append(dist_calc(startX,startY,2*m-x,y))
# 위쪽 벽
if not (startY <= y and startX == x):
tmp_dist.append(dist_calc(startX,startY,x,2*n-y))
# 아래쪽 벽
if not (startY >= y and startX == x):
tmp_dist.append(dist_calc(startX,startY,x,-y))
answer.append(min(tmp_dist))
return answer
🗝️keypoint
- 반사된 경로를 구하는 보다 쉬운 방법은, 목적 당구공이 벽을 거울삼아 반대로 이동했다고 생각하는 것이다.
- 치는 당구공의 경로에 목적 당구공이 있다면 해당 벽에는 맞출 수 없다.
'코딩테스트 > Python' 카테고리의 다른 글
[Programmers] Level 2. 빛의 경로 사이클 (0) | 2025.02.25 |
---|---|
[Baekjoon] 1655. 가운데를 말해요 (0) | 2025.02.25 |
[Baekjoon] 2225. 합분해 (0) | 2025.02.18 |
[Programmers] Level 2. 지게차와 크레인 (0) | 2025.02.17 |
[Beakjoon] 1922. 네트워크 연결 (0) | 2025.02.16 |