알고리즘/프로그래머스문제풀이

[Python/프로그래머스]점 찍기_구현

개발자 덕구🐾 2022. 12. 5. 11:24
728x90

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/140107

 

프로그래머스

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

programmers.co.kr

 

 

 

 

참고블로그를 보면 알수있지만

몇자 적어보자면

 

 

피타고라스 법칙을 이용해서 풀수있다.

( d^2 = x^2 + y^2 ) 에서 x를 이항하면 

( y^2 = d^2 - x^2 )

x를 k 간격으로 돌리면서 모든 x를 다 해보면서 y의 최대값을 구한다.

y의 최댓값에서 k를 나누어 개수를 구한다. 이를 다 더해서 answer을 구해 return 한다. 

 

 

 

 

1 . k의 배수만 가능하므로 for문을 k간격으로 0부터 d까지 돌린다. [ x를 ]

2. 구한 최대의 y 중에서 k의 배수만 답이 될수있으므로 k로 나눈 몫을 구해 answer에 합해준다.

3. answer을 반환한다. 

 

 

 

import math 

def solution(k, d):
    answer = 0
    # 0에서 d의 k 배수만큼 
    for i in range(0,d+1,k) :
        # y의 길이를 반환 받음 
        yMaxDis = yPossiDis(i,d)
        # k의 배수의 숫자가 몇개 있는지 확인 
        answer += yPossiCou(yMaxDis,k)
    return answer

# y의 최대 길이를 반환 
def yPossiDis(x,d) :
    xx,dd = x**2, d**2
    return math.sqrt(dd-xx)

def yPossiCou(possible, k) :
    y = possible //k 
    return y +1

 

 

 

 

 

 

참고 블로그 : 

https://ksb-dev.tistory.com/254

 

프로그래머스 - 점 찍기(Java)

구현 문제입니다. 문제를 요약하면, 거리가 d 이하인 x, y좌표 정수의 개수를 구하는 문제입니다. 단, 각 좌표는 k 배수입니다. 익숙한 그림 아닌가요? 네, 피타고라스 정리를 이용하면 아주 쉽게

ksb-dev.tistory.com

 

반응형