ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 2548 λŒ€ν‘œ μžμ—°μˆ˜ with Python
    PS 2022. 7. 12. 15:52
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 2548 λŒ€ν‘œ μžμ—°μˆ˜

    πŸ’‘ 쑰건

    1. μ •λ³΄μ΄ˆλ“±ν•™κ΅μ˜ μ—°μ•„λŠ” μ—¬λŸ¬ 개의 μžμ—°μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 이λ₯Ό λŒ€ν‘œν•  수 μžˆλŠ” λŒ€ν‘œ μžμ—°μˆ˜μ— λŒ€ν•˜μ—¬ μ—°κ΅¬ν•˜μ˜€λ‹€.
      κ·Έ κ²°κ³Ό μ–΄λ–€ μžμ—°μˆ˜κ°€ λ‹€μŒκ³Ό 같은 μ„±μ§ˆμ„ 가지면 λŒ€ν‘œ μžμ—°μˆ˜λ‘œ 적당할 것이라고 νŒλ‹¨ν•˜μ˜€λ‹€.
      β€œλŒ€ν‘œ μžμ—°μˆ˜λŠ” 주어진 λͺ¨λ“  μžμ—°μˆ˜λ“€μ— λŒ€ν•˜μ—¬ κ·Έ 차이λ₯Ό κ³„μ‚°ν•˜μ—¬ κ·Έ 차이듀 μ „μ²΄μ˜ 합을 μ΅œμ†Œλ‘œ ν•˜λŠ” μžμ—°μˆ˜μ΄λ‹€.”
    1. 예λ₯Ό λ“€μ–΄ 주어진 μžμ—°μˆ˜λ“€μ΄ [4, 3, 2, 2, 9, 10]이라 ν•˜μž.
      μ΄λ•Œ λŒ€ν‘œ μžμ—°μˆ˜λŠ” 3 ν˜Ήμ€ 4κ°€ λœλ‹€.
      μ™œλƒν•˜λ©΄ (4와 3의 차이) + (3κ³Ό 3의 차이) + (2와 3의 차이) + (2와 3의 차이) + (9와 3의 차이) + (10κ³Ό 3의 차이) = 16,
      (4와 4의 차이) + (3κ³Ό 4의 차이) + (2와 4의 차이) + (2와 4의 차이) + (9와 4의 차이) + (10κ³Ό 4의 차이) = 16으둜 κ°™λ‹€.
    1. 첫째 μ€„μ—λŠ” μžμ—°μˆ˜μ˜ 개수 N이 μž…λ ₯λœλ‹€. N은 1 이상 20,000 μ΄ν•˜μ΄λ‹€.
      λ‘˜μ§Έ μ€„μ—λŠ” N개의 μžμ—°μˆ˜κ°€ λΉˆμΉΈμ„ 사이에 두고 μž…λ ₯되며, 이 μˆ˜λ“€μ€ λͺ¨λ‘ 1 이상 10,000 μ΄ν•˜μ΄λ‹€.
    1. 이뢄탐색, μ •λ ¬ μœ ν˜•μ˜ 문제

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    
    
    n = int(stdin.readline())
    arr = list(map(int, stdin.readline().split()))
    arr.sort()
    
    l, r = 0, n
    res = int(1e9)
    ans = max(arr)
    
    while l <= r:
        mid = (l + r) // 2
        temp = sum([abs(x - arr[mid]) for x in arr])
    
        if temp <= res:
            ans = min(ans, arr[mid])
            res = temp
            r = mid - 1
    
        else:
            l = mid + 1
    
    print(ans)

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제

    6
    4 3 2 2 9 10

    μ‹€ν–‰κ²°κ³Ό

    3

    ⌨️ 문제 풀이

    1. 이 λ¬Έμ œλŠ” 이뢄탐색 λ¬Έμ œμ΄λ‹€. N이 μ΅œλŒ€ 20000 이고, 각 숫자의 차이λ₯Ό 일일히 κ΅¬ν•˜λ©΄ λ°˜λ“œμ‹œ TLE 이닀.
    1. μ΅œμ†Ÿκ°’μ„ 0으둜, μ΅œλŒ“κ°’μ„ int(1e9)둜 λ‘” λ’€, 이뢄탐색을 ν†΅ν•΄μ„œ mid 값을 μ •ν•΄μ€€λ‹€
    1. μ •ν•΄μ€€ mid κ°’μœΌλ‘œ μž…λ ₯받은 리슀트의 각 μ›μ†Œκ°’κ³Όμ˜ 차이λ₯Ό 더해 μ΅œμ†Œκ°€ λ˜λŠ”μ§€ κ³„μ‚°ν•œλ‹€.
    1. κ³„μ‚°ν•œ λŒ€ν‘œ μžμ—°μˆ˜κ°€ 기쑴의 λŒ€ν‘œ μžμ—°μˆ˜λ³΄λ‹€ μž‘λ‹€λ©΄ κ°±μ‹ ν•΄μ€€λ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.