Python/Programmers
[프로그래머스] 당구 연습 LV2
Magin
2024. 2. 23. 23:39
728x90
1) 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2)알고리즘
- 한마디로 표현하면 '대칭이동을 활용한 최단거리 구하기'
# 문제를 풀고 정리하다가 깨달았다.(참고)
- 몇몇 상황을 제외한 상황(즉 한쪽 축이 같은 좌표값을 갖는 경우) 모두 4개의 벽 중 가장 최단거리 구하기
# 문제를 풀고 정리하다가
3) 코드
def solution(m, n, startX, startY, balls):
answer = []
for n_x, n_y in balls:
if startX == n_x:
if n_y > startY :
answer.append(min((n_y+startY)**2, (startY-n_y)**2+4*min(n_x,m-n_x)**2))
else:
answer.append(min((2*n-startY-n_y)**2,(n_y-startY)**2+4*min(n_x,m-n_x)**2))
elif startY == n_y:
if n_x > startX :
answer.append(min((n_x+startX)**2,(n_x-startX)**2+4*min(n_y,n-n_y)**2))
else:
answer.append(min((2*m-n_x-startX)**2,(n_x-startX)**2+4*min(n_y,n-n_y)**2))
else:# 나머지 상황(가장 가까운 벽)
answer.append(min((n_x-startX)**2+min(startY+n_y,2*n-startY-n_y)**2,(n_y-startY)**2+min(startX+n_x,2*m-startX-n_x)**2))
return answer
728x90