프로그래머스 LEVEL 2(점 찍기)
-
사용 언어 : 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