๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์  ์ฐ๊ธฐ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์  ์ฐ๊ธฐ - C++

.23 2024. 4. 4. 17:42
๋ฌธ์ œ

์ขŒํ‘œํ‰๋ฉด์„ ์ข‹์•„ํ•˜๋Š” ์ง„์ˆ˜๋Š” x์ถ•๊ณผ y์ถ•์ด ์ง๊ตํ•˜๋Š” 2์ฐจ์› ์ขŒํ‘œํ‰๋ฉด์— ์ ์„ ์ฐ์œผ๋ฉด์„œ ๋†€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ง„์ˆ˜๋Š” ๋‘ ์–‘์˜ ์ •์ˆ˜ k, d๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์„ ์ฐ์œผ๋ ค ํ•ฉ๋‹ˆ๋‹ค.

 

  • ์›์ (0, 0)์œผ๋กœ๋ถ€ํ„ฐ x์ถ• ๋ฐฉํ–ฅ์œผ๋กœ a*k(a = 0, 1, 2, 3 ...), y์ถ• ๋ฐฉํ–ฅ์œผ๋กœ b*k(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
์ž…์ถœ๋ ฅ ์˜ˆ

 


์ˆ˜ํ•™ ํŒŒํŠธ.

์ฒ˜์Œ์—๋Š” (a*k, b*k) ์ขŒํ‘œ๊ฐ€ d ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ์ง€ x, y์ขŒํ‘œ ๊ฐ๊ฐ ์ฒดํฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ ‘๊ทผํ•˜๋ ค ํ–ˆ์œผ๋‚˜ k์˜ ์ œํ•œ ๋ฒ”์œ„๊ฐ€ 100๋งŒ์ด๋ผ 2์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ ๊ฑฐ๊ฐ™์•„์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ด์•ผ ํ–ˆ๋‹ค.

๊ทผ๋ฐ ๋‹ค ํ’€๊ณ  ๋‚จ์˜ ์ฝ”๋“œ ๋ณด๋Š”๋ฐ C++๋กœ๋Š” 2์ค‘ for๋ฌธ ์ ๋‹นํžˆ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๊ฑฐ๊ฐ™๊ธดํ–ˆ์Œ

 

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ•œ ์ถ•์˜ ์ขŒํ‘œ๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ๋‹ค๋ฅธ ์ถ•์—์„œ ์ตœ๋Œ€ ์ขŒํ‘œ๋ฅผ ๊ตฌํ•˜์—ฌ ๊ทธ ์ง€์ ๋ถ€ํ„ฐ ๋ช‡ ๊ฐœ์˜ ์ ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด ๋ชจ๋‘ ๋”ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋•Œ, a์™€ b๊ฐ€ ๋ชจ๋‘ 0์ผ๋•Œ๋„ ํฌํ•จ์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์— 1์„ ๋”ํ•ด์ค€๋‹ค. ๋”ฐ๋ผ์„œ ์ „์ฒด ์ˆ˜์‹์€

 

$$ x=i, \\ y=\lfloor{\sqrt{d^2-x^2}}\rfloor$$

์™€ ๊ฐ™์ด ์„ค๊ณ„ํ•œ ๋’ค, ๊ฐ„๊ฒฉ์ด k์ผ ๋•Œ์˜ ์ ์˜ ๊ฐœ์ˆ˜๋ฅผ $y/k + 1$ ์™€ ๊ฐ™์ด ๊ณ„์‚ฐํ•ด์ฃผ๋ฉด ๋

 

์ธ๋ฐ, d์™€ k์˜ ๋ฒ”์œ„๊ฐ€ 1,000,000์ด๋‹ค ๋ณด๋‹ˆ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์œ ์˜ํ•ด์•„ ํ•  ๊ฒƒ์€ y์˜ ์ขŒํ‘œ๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์—์„œ d*d๋‚˜ x*x์˜ ๊ฐ’์ด int ๋ฒ”์œ„์—์„œ overflow๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํƒ€์ž…์บ์ŠคํŠธ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค....

๊ทธ๊ฑฐ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ ํ‹€๋ ธ๋‹คใ… 

 

int x = i; ๋ถ€๋ถ„ ์•ˆ์ง€์šฐ๋Š”๊ฑฐ ๊นŒ๋จน์—ˆ๋‹ค

 

์ฝ”๋“œ
#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) {
        int x = i;
        int y = floor(sqrt((long)d * d - (long)i * i));
        
        answer += y / k + 1;
    }
    return answer;
}
Comments