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