C++:: 프로그래머스 < 점 찍기 >

jahlee·2023년 4월 18일
0

프로그래머스_Lv.2

목록 보기
35/106
post-thumbnail

문제는 간단히 1사분면 반지름이 d인 원 내부의 k배수의 점들을 구하면 되는 문제이다.
맨처음에 sqrt를 사용해서 풀었는데 sqrt가 실수형 함수여서 오답이 난줄알고 이분탐색으로 sqrt를 구해서 풀었다. 근데 다시 풀어보니 잘 풀린걸 보면 처음에 조건을 잘못 생각해서 틀린듯 싶다.

#include <string>
#include <vector>
using namespace std;

int func(long long i, long long d)
{
    long long left = 1, right = d, mid;
    int res;
    while (left <= right)
    {
        mid = (left+right)/2;
        if (mid*mid + i*i <= d*d)
        {
            left = mid + 1;
            res = mid;
        }
        else right = mid - 1;
    }
    return res;// 원 내부 혹은 위의 최대 정수 리턴(사실상 sqrt를 구한것이다.)
}

long long solution(int k, int d)
{
    long long answer = d/k + 1;// x축 위의 해당 점들++
    for(long long i = 0;i<d;i+=k)
        answer += func(i, d)/k;// 문제조건의 점들++
    return answer;
}

sqrt를 사용하는게 훨씬 간단하다.

#include <string>
#include <vector>
#include <cmath>
using namespace std;

long long solution(int k, int d)
{
    long long answer = d/k + 1;//x축 위의 해당점들
    for(long long i=0;i<d;i+=k)
        answer += (long long)sqrt(1LL*d*d - i*i)/k;// 해당 조건 점들
    return answer;
}

0개의 댓글