프로그래머스 LEVEL 2(점 찍기)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-12-02

  • 해결 방법 :
    • x, y 좌표가 될 a*k 와 b*k는 k 값에 따라 동적이고, 그 개수는 각 1,000,000개 이므로 시간 복잡도를 생각하고 문제 해결
    • 피타고라스 x^2 + y^2 = d^2
    • d는 고정된 값이기에 x, y중 하나에 대해서만 반복 수행
    • d의 제곱에서 x(a*k)의 제곱을 뺀 값의 제곱근이 y의 좌표이고,
    • 구한 y의 좌표를 k로 나누었을 때의 자연수 부분이 현재 x에서 가능한 y 좌표의 개수(0 좌표 제외)
    • 0 좌표는 반복문에서 제외했으므로 return 하기 전 0 좌표의 개수만큼 더함
  • 회고 :
    • x
  • 코드

    function solution(k, d) {
        let answer = 0;
            
        for (let x = 0; x <= d; x += k) {
            const squareX = Math.pow(x, 2);
            const squareD = Math.pow(d, 2);
            const y = Math.sqrt(squareD - squareX);
                
            answer += Math.floor(y / k);
        }
            
        return answer + Math.floor(d / k) + 1;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges