👨‍🏫ps/❄️프로그래머스

[프로그래머스] 점 찍기 [python]

peacekim 2023. 4. 24. 22:46
반응형

문제

처음에 감이 안잡혀서, 힌트를 보았다,,,

원 안에 있는 점을 구하는 건데, 점은 k의 배수 또는 0 이어야 한다는 제약 조건이 있다.

x^2 + y^2 <= d^2 의 점 중에 위 제약 조건에 맞는 것을 구하면 된다.

처음에 가능한 모든 점을 구했다. k의 배수이고, 제곱이 d의 제곱 보다 작은 점들을 구했다.

그리고 한쪽은 가장 작은 곳 부터, 다른 한쪽은 가장 큰 쪽부터 두 수의 제곱이 d의 제곱보다 작은지 구했고,

크다면, (오른쪽의 값 -1)

작다면, (오른쪽의 값+1)을 answer에 더한후, (왼쪽 값+ 1) 해줬다.

왼쪽 기준으로 possibleDot에 있는 값 중 가장 큰 값을 구했기 때문에, 무조건 다음 값은 해당 값보다 작기 때문에, 위 같이 풀 수 있었다.

코드

def solution(k, d):
    answer = 0
    possibleDot = []
    i = 0
    while (i * k) * (i * k) <= d*d:
        possibleDot.append(i*k)
        i += 1
    i = len(possibleDot) - 1
    j = 0
    
    while j < len(possibleDot):
        if possibleDot[j] * possibleDot[j] + possibleDot[i] * possibleDot[i] > d*d:
            i -= 1
        else:
            answer += (i + 1)
            j += 1
    return answer
"""
두 양의 정수 k, d가 주어질 때 
x축: a*k, y축: b*k 만큼 떨어진 위치에 점을 찍는다
원점과 거리가 d를 넘는 위치에는 점을 찍지 않는다.
완점 탐색하면 안됨
"""
반응형