[TIL] 250904

๊น€์„ธํฌยท2025๋…„ 9์›” 4์ผ

โœ๏ธToday I Learned

๐Ÿ“… 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 ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค k โ‰ค 1,000,000
  • 1 โ‰ค d โ‰ค 1,000,000

ํ’€์ด

์›๋ž˜ ํ’€์ด
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;
}

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)

์‹œ๊ฐ„ ๋ณต์žก๋„ ๋จผ์ € ๊ณ„์‚ฐํ•˜๊ธฐ!


์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์  ์ฐ๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€