๐
2025-09-04
๋ฌธ์ ๋งํฌ
๋ฌธ์ ์ค๋ช
์ขํํ๋ฉด์ ์ข์ํ๋ ์ง์๋ x์ถ๊ณผ y์ถ์ด ์ง๊ตํ๋ 2์ฐจ์ ์ขํํ๋ฉด์ ์ ์ ์ฐ์ผ๋ฉด์ ๋๊ณ ์์ต๋๋ค. ์ง์๋ ๋ ์์ ์ ์ k, d๊ฐ ์ฃผ์ด์ง ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ ์ฐ์ผ๋ ค ํฉ๋๋ค.
์์ (0, 0)์ผ๋ก๋ถํฐ x์ถ ๋ฐฉํฅ์ผ๋ก ak(a = 0, 1, 2, 3 ...), y์ถ ๋ฐฉํฅ์ผ๋ก bk(b = 0, 1, 2, 3 ...)๋งํผ ๋จ์ด์ง ์์น์ ์ ์ ์ฐ์ต๋๋ค.
์์ ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ d๋ฅผ ๋๋ ์์น์๋ ์ ์ ์ฐ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, k๊ฐ 2, d๊ฐ 4์ธ ๊ฒฝ์ฐ์๋ (0, 0), (0, 2), (0, 4), (2, 0), (2, 2), (4, 0) ์์น์ ์ ์ ์ฐ์ด ์ด 6๊ฐ์ ์ ์ ์ฐ์ต๋๋ค.
์ ์ k์ ์์ ๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ด๋ ์ ์ d๊ฐ ์ฃผ์ด์ก์ ๋, ์ ์ด ์ด ๋ช ๊ฐ ์ฐํ๋์ง return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
์๋ ํ์ด
O((d/k)^2)์ ๊ฐ๊น์์ ธ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค.
#include <vector>
using namespace std;
long long solution(int k, int d) {
long long answer = 0;
long long D = d;
int n = 0;
while(D>=n*k)
{
long long y = n*k;
for(int i=0; i<=n; i++)
{
long long x = i*k;
if(D*D >= y*y + x*x)
{
answer+=2;
}
else break;
if(y==x) answer-=1;
}
n++;
}
return answer;
}
์ต์ข
ํ์ด
์ต๋ํ ๋ฐ๋ณต์ด ์๋๋ผ ๊ณ์ฐ์ผ๋ก ๊ฐฏ์๋ฅผ ๊ณ์ฐํ๋ค.
#include <vector>
#include <cmath>
using namespace std;
long long solution(int k, int d) {
long long answer = 0;
long long D=d;
for(int i=0; i*k<=D; i++)
{
long long x = i*k;
long long y = sqrt(D*D-x*x);
answer += y/k +1;
}
return answer;
}
์๊ฐ ๋ณต์ก๋ ๋จผ์ ๊ณ์ฐํ๊ธฐ!
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค - ์ ์ฐ๊ธฐ