μ•Œκ³ λ¦¬μ¦˜πŸ₯š/λ¬Έμ œν’€μ΄ (Java)

[Programmers] 두 원 μ‚¬μ΄μ˜ μ •μˆ˜ 쌍 (Lv.2) 2023/6/11

πŸͺ„ν•˜λ£¨πŸͺ„ 2023. 6. 11. 16:57
728x90

 

문제 제λͺ© μ •λ‹΅λ₯  λ‚œμ΄λ„
두 μ› μ‚¬μ΄μ˜ μ •μˆ˜ μŒ 36% Lv.2
 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

 

λ¬Έμ œμš”μ•½

두 μ›μ˜ λ°˜μ§€λ¦„μ΄ μ£Όμ–΄μ§ˆ λ•Œ, 원 μ‚¬μ΄μ˜ μ •μˆ˜μΈ 점의 개수λ₯Ό κ΅¬ν•˜μ—¬λΌ

쑰건 1) 두 μ›μ˜ λ°˜μ§€λ¦„μ€ μ •μˆ˜μ΄κ³ , λ°˜μ§€λ¦„μ˜ ν¬κΈ°λŠ” r1<r2 이닀.

쑰건 2) μ›μ˜ 경계ꡬ간도 ν¬ν•¨ν•œλ‹€.

 

 

풀이

Step1. 1 사뢄면 κΈ°μ€€μœΌλ‘œ 점의 수λ₯Ό μ„Ό λ’€ 4λ°°λ₯Ό κ³±ν•˜μ—¬ λ°˜ν™˜

  • μ΅œλŒ€ 점과 μ΅œμ†Œ 점을 κ΅¬ν•œ λ’€ 개수λ₯Ό μ„Όλ‹€.
  • yμΆ• μœ„μ˜ μ–‘μ˜ μ •μˆ˜μ˜ 점의 개수λ₯Ό μ„Όλ‹€.(xμΆ• μœ„μ˜ μ–‘μ˜ μ •μˆ˜μ˜ 점의 κ°œμˆ˜λŠ” 세지 μ•ŠλŠ”λ‹€)

 

β€»β€» ν’€μ΄λŠ” λͺ¨λ‘ λ§žμ•˜λŠ”λ°, λ’·λΆ€λΆ„μ˜ ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ—μ„œ 였λ₯˜κ°€ λ°œμƒ(λ§€κ°œλ³€μˆ˜ μžλ£Œν˜•μ΄ int이기 λ•Œλ¬Έ) -> long 으둜 λ³€κ²½

μžλ£Œν˜•μ˜ 크기 κ²Œμ‹œλ¬Ό μ°Έμ‘°! 

import static java.lang.Math.*;
class Solution {
    public long solution(long r1, long r2) {
        long answer = 0;
        //1. 1사뢄면 μœ„μ˜ 점의 개수
        for (long i=0; i<Math.floor(r2); i++){
            double max_y=Math.floor(sqrt(r2*r2-i*i));
            if(i<r1){
                double min_y=Math.ceil(sqrt(r1*r1-i*i));
                answer+=max_y-min_y+1;
            }else{
                answer+=max_y;
            }
        }
    return 4*answer;
    }
}
728x90