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로 바꾸자 해결됐다.
정밀도 차이인가 싶은..
'알고리즘' 카테고리의 다른 글
[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 |