Loading...
본문 바로가기
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

PS/프로그래머스

[프로그래머스][수학] 점찍기, 두 원 사이의 정수의 쌍

by 꽁이꽁설꽁돌 2025. 10. 12.
728x90
반응형
     

목차

    문제

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

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

    문제 방향

    다 해보아야 하나 고민하다가 헤맸던 문제이다. 원의 방정식으로 접근하면 정말 간단하게 해결할 수 있다.

    반지름에 대한 x의 값을 배수별로 고정하고 y의 개수를 배수별로 더해주면 된다.

     

     

    코드 구현

    function solution(k, d) {
        var answer = 0;
        for(let i=0; i<=d; i+=k){
            let res = Math.sqrt(d**2-i**2);
            answer += Math.floor(res/k)+1;
        }
        return answer;
    }

     

     

    문제

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

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

     

    문제 방향

    이중 순회하면 시간초과가 나기에 일차원 순회만 해야한다. 이때 키 포인트는 한 좌표를 기준으로 다른 좌표의 개수를 더한뒤 +1해주는 것이다. 한 사분면만 구하면 되기 때문에 4곱해주면 답이다.

     

    이때 주의할 점은 더 큰 원은 미만으로 해야하기 때문에 Math.floor, 더 작은 원은 초과로 해야하기 때문에 Math.ceil을 써줘야 한다. 

    코드 구현

    function solution(r1, r2) {
        var answer = 0;
        for(let x =1; x<=r2; x++){
            let y1 = Math.floor(Math.sqrt(Math.pow(r2, 2)- Math.pow(x, 2)));
            let y2 = Math.ceil(Math.sqrt(Math.pow(r1, 2)- Math.pow(x, 2))) || 0;
     
            answer += (y1-y2+1)* 4;
        }
        return answer;
    }
    반응형