λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🧠 μ•Œκ³ λ¦¬μ¦˜

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]두 원 μ‚¬μ΄μ˜ μ •μˆ˜ 쌍 JS

by megan07 2023. 12. 27.

πŸ’‘μ ‘κ·Όλ°©λ²•

μ›μ˜ λ°©μ •μ‹ ν™œμš©ν•˜κΈ°!
(x-a)^2 + (y-b)^2 = r^2
μ›μ˜ μ€‘심이 μ›μ μ΄κΈ° λ•Œλ¬Έμ— x^2 + y^2 = r^2

μ›μ˜ λ°©μ •μ‹μ„ ν™œμš©ν•΄μ„œ x값에 λ”°λ₯Έ μ›μ˜ y값을 κ΅¬ν•˜κΈ°
각 x값에 λ”°λ₯Έ μ μ˜ λ²”μœ„
μž‘μ€ μ›μ˜ yκ°’ <= μ •μˆ˜ <= ν° μ›μ˜ yκ°’

제 1μ‚¬λΆ„λ©΄μ—μ„œ r2와 r1사이에 λ“€μ–΄κ°ˆ μˆ˜ μžˆλŠ” μ μ˜ λ²”μœ„λ₯Ό κ΅¬ν•œ λ‹€μŒ *4

 


function solution(r1, r2) {
    
    let result =0;
    
    //큰 원보닀 μž‘μ€ λ²”μœ„λ‚΄μ—μ„œ 제1사뢄면에 λ“€μ–΄κ°ˆ 수 μžˆλŠ” 점의 yμΆ• λ²”μœ„ κ΅¬ν•˜κΈ°
    for(let x =1;x<=r2;x++){
        
    	//큰 μ›μ˜ yμ’Œν‘œ(큰 원보닀 μž‘μ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μž‘μ€ μ •μˆ˜λ‘œ)
        const r2_y = Math.floor(Math.sqrt(Math.pow(r2,2)-Math.pow(x, 2)));
        
        //μž‘μ€ μ›μ˜ yμ’Œν‘œ(μž‘μ€ 원보닀 큰 μ •μˆ˜μ—¬μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 올림)
        const r1_y = Math.ceil(Math.sqrt(Math.pow(r1,2)-Math.pow(x, 2)))||0;
        
        //λ²”μœ„ μ•ˆμ˜ μ •μˆ˜μ˜ 개수λ₯Ό ꡬ해야 ν•˜κΈ° λ•Œλ¬Έμ— +1
        const cnt = r2_y - r1_y+1;
        result+=cnt*4;
    }
    
    
    return result;
   
}

https://school.programmers.co.kr/learn/courses/30/lessons/181187