5주차 첫 번째 문제 - 당구 연습
Programmers의 당구 연습라는 문제를 다 같이 풀어보았습니다.
📖 문제
✏️ 나의 풀이
def solution(m, n, startX, startY, balls):
answer = []
loc = []
for ball in balls:
a, b, c, d = startX, startY, ball[0], ball[1]
left = (a+c)**2+(b-d)**2
right = (2*m-(a+c))**2+(b-d)**2
bottom = (a-c)**2+(b+d)**2
top = (a-c)**2+(2*n-(b+d))**2
dis = [left, right, bottom, top]
if startX == ball[0]:
if startY > ball[1]:
del dis[2]
elif startY < ball[1]:
del dis[3]
elif startY == ball[1]:
if startX > ball[0]:
del dis[0]
elif startX < ball[0]:
del dis[1]
answer.append(min(dis))
return answer
Point - 공을 쳐서 부딪히는 벽 4방향의 상황을 모두 고려하여 거리를 계산한 후 최소값을 산출
- for문을 이용하여 쳐야하는 공의 위치의 x좌표, y좌표, 목표 공의 x좌표, y좌표를 각각 a, b, c, d에 넣어줌.
- 각 벽에 부딪히는 경우의 거리구하는 식을 계산한 후 dis변수에 넣어줌. ex) 왼쪽 벽에 부딪히는 경우 left, 아래쪽 벽에 부딪히는 경우 bottom
- 치는 공과 목표 공의 x좌표 or y좌표가 같은 경우는 예외처리를 하여 계산.
- 이후 나올 수 있는 거리의 최솟값을 산출
💡 느낀점
- 거리를 구하고 최솟값을 구하는 방법은 어렵지 않았지만, 예외처리를 하는 부분에서 자꾸 실수가 나서 오래걸린 문제였다.
잘못된 내용이나 피드백은 언제나 환영입니다.
출처 : 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
댓글남기기