ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo RhythmπŸ•ΊπŸ’ƒ]BOJ 6588 - κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘
    Algo RhythmπŸ•ΊπŸ’ƒ/BOJ 2021. 6. 23. 17:45

    문제 뢄석

    이 λ¬Έμ œλŠ” 4보닀 큰 μ–΄λ–€ 짝수 $x (6 \le x \le 10^6)$κ°€ 두 ν™€μˆ˜μΈ μ†Œμˆ˜ $a, b (a \le b)$의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλŠ”μ§€ νŒλ³„ν•˜λŠ” λ¬Έμ œμ΄λ‹€. μ΄λ•Œ μ£Όμ˜ν•  점은 κ³¨λ“œλ°”νμ˜ 좔츑은 $10^{18}$ μ΄ν•˜μ—μ„œ μ°Έμž„μ΄ ν™•μΈλ˜μ—ˆκΈ° λ•Œλ¬Έμ— 두 ν™€μˆ˜ μ†Œμˆ˜μ˜ ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄μ§€ λͺ» ν•˜λŠ” κ²½μš°λŠ” μƒκ°ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€λŠ” 것이닀.

     

    문제 풀이

    1. 'μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜' μ‘μš©

    주어진 $x$에 λŒ€ν•˜μ—¬ $a$의 κ°€λŠ₯ν•œ μ΅œμ†Œκ°’μΈ 3λΆ€ν„° $x - a$인 $b$κ°€ 2보닀 크지 μ•Šμ„ λ•ŒκΉŒμ§€ $a, b$ λͺ¨λ‘ μ†Œμˆ˜μΈμ§€ νŒλ³„ν•œλ‹€.

    λ§Œμ•½ λͺ¨λ‘ μ†Œμˆ˜λΌλ©΄ $x = a + b$λ₯Ό 좜λ ₯ν•œ λ’€ λ°˜λ³΅λ¬Έμ„ νƒˆμΆœν•˜κ³  그렇지 μ•Šλ‹€λ©΄ $a$λ₯Ό 2μ”© μ¦κ°€ν•˜κ³  μœ„ 과정을 λ°˜λ³΅ν•œλ‹€. μ΄λ•Œ 2μ”© μ¦κ°€ν•˜λŠ” μ΄μœ λŠ” μ§μˆ˜λŠ” μ ˆλŒ€ μ†Œμˆ˜κ°€ 될 수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.

     

    2. 'μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체' μ‘μš©

    μ—λΌν† μŠ€ν…Œλ‹ˆμŠ€μ˜ μ²΄λΌλŠ” μ†Œμˆ˜λ₯Ό κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄ μ†Œμˆ˜μΈ μˆ˜μ™€ μ•„λ‹Œ μˆ˜λ“€μ„ κ΅¬λ³„ν•œ 배열을 λ§Œλ“ λ‹€.

    κ·Έλ¦¬κ³ λ‚˜μ„œ 주어진 $x$에 λŒ€ν•˜μ—¬ $a$의 κ°€λŠ₯ν•œ μ΅œμ†Œκ°’μΈ 3λΆ€ν„° $10^6$보닀 μž‘κ±°λ‚˜ 같을 λ•ŒκΉŒμ§€ $a$와 $x - a$인 $b$κ°€ λͺ¨λ‘ μ†Œμˆ˜μΈμ§€ νŒλ³„ν•œλ‹€. μ΄λ•Œ νŒλ³„μ„ μœ„ν•΄ μ•žμ„œ λ§Œλ“  배열을 μ΄μš©ν•œλ‹€.

    λ§Œμ•½ λͺ¨λ‘ μ†Œμˆ˜λΌλ©΄ $x = a + b$λ₯Ό 좜λ ₯ν•œ λ’€ λ°˜λ³΅λ¬Έμ„ νƒˆμΆœν•˜κ³  그렇지 μ•Šλ‹€λ©΄ $a$λ₯Ό 2μ”© μ¦κ°€ν•˜κ³  μœ„ 과정을 λ°˜λ³΅ν•œλ‹€. μ΄λ•Œ 2μ”© μ¦κ°€ν•˜λŠ” μ΄μœ λŠ” μ§μˆ˜λŠ” μ ˆλŒ€ μ†Œμˆ˜κ°€ 될 수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.

     

    λ³΅μž‘λ„ 뢄석

    ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ‘œ μ£Όμ–΄μ§€λŠ” 짝수 μ •μˆ˜λ₯Ό $x\ (6 \le x \le 10^6)$, ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ˜ 개수λ₯Ό $y\ (1 \le y \le 10^5)$라고 ν•  λ•Œ, 각 μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

     

    1. 'μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜' μ‘μš©

    - μ‹œκ°„ λ³΅μž‘λ„ : $O(x\sqrt{x}y)$

     

    1️⃣. 2οΈβƒ£λ²ˆ 과정을 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ˜ 개수인 y번 λ°˜λ³΅ν•œλ‹€.

    2️⃣. $a$λ₯Ό μ°ΎκΈ° μœ„ν•΄ μ΅œμ•…μ˜ 경우 3λΆ€ν„° $(x - 2)$번 2μ”© μ¦κ°€ν•˜λ©΄μ„œ 3οΈβƒ£λ²ˆ 과정을 λ°˜λ³΅ν•œλ‹€.

    3️⃣. $a, b$ λͺ¨λ‘ μ†Œμˆ˜μΈμ§€ νŒλ³„ν•œλ‹€.

     

    1️⃣, 2️⃣, 3οΈβƒ£λ²ˆ κ³Όμ •μ—μ„œ μ†Œμš”λ˜λŠ” μ‹œκ°„μ€ 각각 $O(y), O(x), O(\sqrt{x})$ 이닀.

    λ”°λΌμ„œ, 전체적인 μ‹œκ°„λ³΅μž‘λ„λŠ” $O(x\sqrt{x}y)$이닀.

     

    - 곡간 λ³΅μž‘λ„ : O(1)

     

    2. 'μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체' μ‘μš©

    - μ‹œκ°„ λ³΅μž‘λ„ : $O(xlog(logx) + xy)$

     

    μ†Œμˆ˜μΈμ§€ μ•„λ‹Œμ§€ κ΅¬λΆ„ν•˜λŠ” 배열을 λ§Œλ“€κΈ° μœ„ν•΄ μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체λ₯Ό μ‚¬μš©ν•˜λŠ”λ° μ΄λ•Œ μ†Œμš”λ˜λŠ” μ‹œκ°„μ€ O(xlog(logx))이닀.

     

    1️⃣. 2οΈβƒ£λ²ˆ 과정을 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ˜ 개수인 $y$번 λ°˜λ³΅ν•œλ‹€.

    2️⃣. $a$λ₯Ό μ°ΎκΈ° μœ„ν•΄ μ΅œμ•…μ˜ 경우 3λΆ€ν„° $10^6$κΉŒμ”© 2μ”© μ¦κ°€ν•œλ‹€.

     

    1️⃣, 2οΈβƒ£λ²ˆ κ³Όμ •μ—μ„œ μ†Œμš”λ˜λŠ” μ‹œκ°„μ€ 각각 $O(y), O(x)$이닀.

    λ”°λΌμ„œ, 전체적인 μ‹œκ°„ λ³΅μž‘λ„λŠ” $O(xlog(logx) + xy)$이닀.

     

    - 곡간 λ³΅μž‘λ„ : O(x)

    μ†Œμˆ˜μΈμ§€ μ•„λ‹Œμ§€ κ΅¬λΆ„ν•˜λŠ” λ°°μ—΄μ˜ ν¬κΈ°λŠ” x의 μ΅œλŒ€ 크기인 10^6이닀.

     

    μ½”λ“œ

    1. 'μ†Œμˆ˜ νŒλ³„ μ•Œκ³ λ¦¬μ¦˜' μ‘μš©

     

    2. 'μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체' μ‘μš©

     

    문제 좜처

    https://www.acmicpc.net/problem/6588

     

    6588번: κ³¨λ“œλ°”νμ˜ μΆ”μΈ‘

    각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄μ„œ, n = a + b ν˜•νƒœλ‘œ 좜λ ₯ν•œλ‹€. μ΄λ•Œ, a와 bλŠ” ν™€μˆ˜ μ†Œμˆ˜μ΄λ‹€. μˆ«μžμ™€ μ—°μ‚°μžλŠ” 곡백 ν•˜λ‚˜λ‘œ κ΅¬λΆ„λ˜μ–΄μ Έ μžˆλ‹€. λ§Œμ•½, n을 λ§Œλ“€ 수 μžˆλŠ” 방법이 μ—¬λŸ¬ 가지라면, b-aκ°€ κ°€μž₯ 큰

    www.acmicpc.net

     

    λŒ“κΈ€

Designed by Tistory.