알고리즘

[programmers] 점 찍기

졔졔311 2023. 5. 12. 19:38
728x90
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

---------------------------------------------------핵심 알고리즘--------------------------------------------

 

원 내부의 점 개수 구하기 => x좌표를 기준으로 x^2+y^2<=r^2이 되는 최대 y+1이 해당 선분에서의 정수의 개수이다.

 

--------------------------------------------------풀이-----------------------------------------------------

 

#include <string>
#include <vector>
#include <math.h>

using namespace std;

// x^2 + y^2 <= (d/k)^2
// 이 반원에서 x축을 기준으로 y축의 각 값을 더해 총 정수 개수 구하기
long long solution(int k, int d) {
    long long answer = 0;
    long double R = (long double)d/k;
    long double RR = (long double)pow(R,2);
    for(int i = 0; i <= R; i++){
        // y값이 0~Y까지
        answer += sqrt(RR-pow(i,2))+1;
    }
    return answer;
}

 

--------------------------------------------------후기-----------------------------------------------------

 

처음엔 단순하게 원 내부의 점 개수만 세면 되겠다는 생각에 그렇게 제출했는데, 틀려서 의아했다.

원인을 모르다가 double로 선언한 R과 RR에서 문제가 발생했을 수 있다는 생각이 들었고, long double로 바꾸자 해결됐다.

정밀도 차이인가 싶은..

728x90
반응형

'알고리즘' 카테고리의 다른 글

[programmers] 억억단을 외우자  (2) 2023.05.12
[programmers] 귤 고르기  (1) 2023.05.12
[programmers] 디펜스 게임  (0) 2023.05.12
[programmers] 테이블 해시 함수  (1) 2023.05.12
[programmers] 유사 칸토어 비트열  (1) 2023.05.10