ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프그래머스 2단계] 두 원 사이의 정수 쌍
    알고리즘 2024. 3. 23. 20:52

    ❓문제 설명

    • 두 개의 반지름을 받을 것임 이것을 통해서 만들어진 2개의 원이 있는데 이 원들이 가지는 정수 좌표값 중 공통된 것을 빼고 나머지를 구하는 것임

    ✅ 문제 해결

    • 원의 반지름을 통해서 정수좌표를 어떻게 구할 수 있을지 알아보았으며 x2 + y2 = r2이 공식을 통해서 구할 수 있는 방법을 알아보았음
    • 큰 원의 정수좌표를 객체로 만들고 작은 원의 정수좌표를 구할 때 공통된 것이 있다면 객체에서 없애보자.
    function solution(r1, r2) {
        var answer = 0;
        for(var x = 1;x<=r2;x++){
            var maxY = Math.floor(Math.sqrt(r2**2 - x**2));
            if(r1>x){
                var minY = Math.ceil(Math.sqrt(r1**2 - x**2));
            }
            else{
                var minY = 0;
            }
            answer+= (maxY - minY + 1);
        }
        return answer*4;
    }

     

    • BFS의 개념에 대해서 부족한 부분도 많아서 다른 코드를 참고하면서 만들어 봄

    🔥 인상 깊은 남의 풀이

    function solution(r1, r2) {
        var answer = 0;
        for(var x = 1;x<=r2;x++){
            var maxY = Math.floor(Math.sqrt(r2**2 - x**2));
            if(r1>x){
                var minY = Math.ceil(Math.sqrt(r1**2 - x**2));
            }
            else{
                var minY = 0;
            }
            answer+= (maxY - minY + 1);
        }
        return answer*4;
    }

     

    • 쓸 데 없이 배열에 좌표값을 저장할 필요가 없다. 실제로 사용하지 않기 때문에 이처럼 count만 올리는 방법을 통해서 구현을 하는 것이 좋은 것 같다. 메모리적으로도 코드량으로도 상당히 적은 모습을 보여준다.

    ❕느낀점

    • 생각하는 방식에서 많은 차이가 있는 것 같다 배열을 구해서 차이를 구한다는 식으로 생각을 했었는데 좀 더 사용하는 부분에 대해서만 생각을 해서 count만 하는 방식으로 생각하지 못한것이 아쉽다.
    • 전체적으로 2단계로 가니깐 확실히 수학적 계산이나 기본 알고리즘에 대한 지식을 많이 필요로 하는 것 같다.
    • Math가 가진 메서드에 대해서도 좀 더 자세하게 알아서 적극적으로 사용해야할 필요성이 있다고 생각한다.

    댓글

Designed by Tistory.