λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm

[Algorithm] 두 원 μ‚¬μ΄μ˜ μ •μˆ˜μŒ

πŸ“‹ 문제


xμΆ•κ³Ό yμΆ•μœΌλ‘œ μ΄λ£¨μ–΄μ§„ 2차원 μ§κ΅ μ’Œν‘œκ³„에 μ€‘심이 μ›μ μΈ μ„œλ‘œ λ‹€λ₯Έ ν¬κΈ°μ˜ μ›μ΄ λ‘ κ°œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. λ°˜μ§€λ¦„을 λ‚˜νƒ€λ‚΄λŠ” λ‘ μ •μˆ˜ r1, r2κ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, λ‘ μ› μ‚¬μ΄μ˜ κ³΅κ°„에 xμ’Œν‘œμ™€ yμ’Œν‘œκ°€ λͺ¨λ‘ μ •μˆ˜μΈ μ μ˜ κ°œμˆ˜λ₯Ό returnν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.
β€» κ° μ› μœ„μ˜ μ λ„ ν¬ν•¨ν•˜μ—¬ μ…‰λ‹ˆλ‹€.

μ œν•œ μ‚¬ν•­

1 ≤ r1 < r2 ≤ 1,000,000

 

μž…μΆœλ ₯ μ˜ˆ

2 3 20

 

✏️ 풀이

μš°μ„  λͺ¨λ“  경우λ₯Ό νƒμƒ‰ν•œλ‹€λ©΄ λ‹Ήμ—°νžˆ μ‹œκ°„μ΄ˆκ³Όκ°€ λ‚  것이라고 μƒκ°ν–ˆλ‹€. μ²˜μŒμ—λŠ” 원 μ•ˆμ— 무쑰건 μ‚¬κ°ν˜•μœΌλ‘œ 점이 찍힐 것이라고 μƒκ°ν•΄μ„œ 지름 - 2의 μ œκ³±μ„ μƒκ°ν–ˆλ‹€. ν•˜μ§€λ§Œ 어쩐일인지 λͺ¨λ“  ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν–ˆλ‹€. μƒκ°ν•΄λ³΄λ‹ˆ λ‹€μŒκ³Ό 같은 κ²½μš°κ°€ μžˆμ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€.

 

νŒŒλž€μƒ‰ 원을 κΈ°μ€€μœΌλ‘œ λΉ¨κ°„ λ°•μŠ€λŒ€λ‘œ 점이 μ°¨μžˆμ„ 것이라고 μƒκ°ν–ˆμ—ˆλ‹€. ν•˜μ§€λ§Œ λ°˜μ§€λ¦„μ— 따라 경우λ₯Ό μƒκ°ν•΄μ€˜μ•Ό ν•˜κΈ° λŒ€λ¬Έμ— λ³΅μž‘ν•΄ 질 수 μžˆμ–΄ λ‹€λ₯Έ 방법을 μƒκ°ν•˜κ²Œ λ˜μ—ˆκ³  사뢄면 쀑에 ν•œ λΆ€λΆ„λ§Œ κ³„μ‚°ν•΄μ„œ 4λ₯Ό κ³±ν•΄μ£ΌλŠ” 방법을 생각해봀닀.

 

μ²˜μŒμ—λŠ” 이쀑 for문을 μ΄μš©ν•΄μ„œ λŒλ €λ³΄μ•˜μœΌλ‚˜ μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν–ˆλ‹€. λ‹€μ‹œ μ‹œλ„ν•œ 방법은 κ°€λŠ₯ν•œ μ •μˆ˜μŒμ˜ μ΅œμ†Œ, μ΅œλŒ€λ₯Ό κ΅¬ν•˜λŠ” λ°©λ²•μ΄μ—ˆλ‹€.

ν”Όνƒ€κ³ λΌμŠ€ μ •μ˜λ₯Ό μ΄μš©ν•΄μ„œ κ΅¬ν•˜λŠ” 방법이닀. μœ„μ˜ μ˜ˆμ‹œλŠ” yκ°€ 2일 λ•Œμ˜ μ˜ˆμ‹œμ΄λ‹€. λ°”κΉ₯μͺ½μ— μœ„μΉ˜ν•˜λŠ” μ›μ˜ yκ°€ 2μΌλ•Œλ₯Ό κ΅¬ν•œλ‹€λ©΄ (λ°˜μ§€λ¦„^2 - y^2)의 μ œκ³±κ·Όμ„ ꡬ해주면 λœλ‹€. λ‚΄λΆ€ 원도 λ§ˆμ°¬κ°€μ§€λ‘œ κ³„μ‚°ν•˜κ³  μ™ΈλΆ€ 원은 λ‚΄λ¦Ό, λ‚΄λΆ€ 원은 μ˜¬λ¦Όν•˜μ—¬ 사이에 μœ„μΉ˜ν•  수 μžˆλŠ” μ •μˆ˜μŒμ˜ 수λ₯Ό κ΅¬ν•˜κ³  answer에 더해쀀닀. μ΄λ ‡κ²Œ 되면 사뢄면 쀑 ν•œ λΆ€λΆ„μ—μ„œ ν•œμͺ½ 좕을 μ œμ™Έν•œ λΆ€λΆ„μ˜ κ°€λŠ₯ν•œ μ •μˆ˜μŒμ„ ꡬ할 수 μžˆλ‹€. λ”°λΌμ„œ λ§ˆμ§€λ§‰μ— 4λ°°λ₯Ό ν•΄μ£Όκ³  λ°˜ν™˜ν•˜λ©΄μ„œ 문제λ₯Ό ν•΄κ²°ν–ˆλ‹€.

 

⌨️ μ½”λ“œ

function solution(r1, r2) {
  var answer = 0;

  for (let i = 1; i <= r2; i++) {
    const min = Math.ceil(Math.sqrt(r1 ** 2 - i ** 2)) || 0;
    const max = Math.floor(Math.sqrt(r2 ** 2 - i ** 2));

    answer += max - min + 1;
  }

  return answer * 4;
}

 

'Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Algorithm] 달리기 κ²½μ£Ό  (0) 2023.04.17
[Algorithm] 햄버거 λ§Œλ“€κΈ°  (0) 2023.04.16
[Algorithm] μš”κ²© μ‹œμŠ€ν…œ  (1) 2023.04.13
[Algorithm] μ•„μ΄ν…œ 쀍기  (1) 2023.04.12
[Algorithm] 곡원 μ‚°μ±…  (0) 2023.04.11