JasonScript

Jason's Research Blog

Development/Algorithm

< 알고리즘 문제 풀이 > 당구 연습

jason.bak 2023. 12. 5. 20:20

문제 링크 > 코딩테스트 연습 - 당구 연습 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

솔루션 >

def solution(m, n, startX, startY, balls):
    answer = []
    for ball in balls:
        diffX = startX - ball[0]
        diffY = startY - ball[1]
        
        left = (startX + ball[0]) ** 2 + (diffY ** 2) # 왼쪽 쿠션
        right = ((m - startX) + (m - ball[0])) ** 2 + (diffY ** 2) # 오른쪽 쿠션
        top = (diffX ** 2) + ((n - startY) + (n - ball[1])) ** 2 # 위쪽 쿠션
        bottom = (diffX ** 2) + (startY + ball[1]) ** 2 # 아래쪽 쿠션
        
        if diffX == 0: # X축 같은 선상일 때
            if diffY > 0: # 아래쪽 방향 쿠션 안됨
                result = min(left, right, top)        
            else: # 위쪽 방향 쿠션 안됨
                result = min(left, right, bottom)    
                
        elif diffY == 0: # Y축 같은 선상일 때
            if diffX > 0: # 왼쪽 쿠션 안됨
                result = min(right, top, bottom)        
            else: # 오른쪽 쿠션 안됨
                result = min(left, top, bottom)      
                
        else: # 같은 축 없을 때
            result = min(left, right, top, bottom)

        answer.append(result)
    return answer