https://school.programmers.co.kr/learn/courses/30/lessons/140107
첫번째 풀이(시간초과)
처음엔 단순하게 가능한 경우를 모두 구한 뒤, 두 점사이의 거리가 d보다 작은 점만 가려냈다
function solution(k, d) {
var answer = 0;
const group = [];
const count = Math.floor(d/k);
for (let i = 0; i <= count; i++) {
const x = i * k;
for (let j = 0; j <= count; j++) {
const y = j *k;
group.push([x, y]);
}
}
for (const [x, y] of group) {
if (Math.sqrt(x*x + y*y) <= d) {
answer++;
}
}
return answer;
}
두번째 풀이(성공)
1,000,000 => O( NlogN ) => 내부순회량을 줄이기에 포커스를 맞추고 고민했다
간단히 생각해보니 쉬웠다
x를 순회하면서 최대y값을 구하고, 각 x마다 찍을수 있는 y점의 갯수를 더한다
function solution(k, d) {
var answer = 0;
// k배씩 증가
for (let x = 0; x <= d; x+=k) {
const maxY = Math.sqrt(d*d - x*x);
answer += Math.floor(maxY/k)+1;
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[프로그래머스 lv2] 두 큐 합 같게 만들기 (0) | 2023.10.10 |
---|---|
[프로그래머스] 디펜스 게임 (0) | 2023.10.10 |
[이분탐색] 입국심사 (0) | 2023.10.09 |
[프로그래머스 lv2] 연속된 부분 수열의 합JS [투포인터] (0) | 2023.10.09 |
[프로그래머스 lv2] 할인 행사 (0) | 2023.10.09 |