study
점찍기[프로그래머스]


점찍기[프로그래머스]

접근법:

  1. 현재 i 의 위치에서 도달 할수 있는 최대 y을 구한다.
  2. y축 위에서 k의 배수 인 점의 갯수 + 0 일 때의 1개
#include <string>
#include <vector>
#include <cmath>
using namespace std;

long long solution(int k, int d) {
    long long answer = 0;
    for(int i = 0; i <= d; i += k)
    {
        long long ys = (long long) d * d - (long long) i * i;
        
        long long y = sqrt(ys);
        
        answer += (y / k) + 1;
    }
    return answer;
}

시간이 오래 걸리는 접근법:

  • 이중루프를 사용해서 시간제한을 통과하지 못했다.
#include <string>
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;

float distance(int x, int y)
{
    return sqrt(pow((float)x,2) + pow((float)y,2));
}

long long solution(int k, int d) {
    long long answer = 0;
    
    for(int i = 0 ; i <= d; i += k)
    {
        for(int j = 0; j <= d; j += k)
        {
            //cout << distance(i, j) << " ";
            if(distance(i, j) <= d)
                answer++;
        }
        //cout << endl;
    }
    return answer;
}