๊ธฐ๋ก๋ฐฉ

BOJ_2805 : ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ ๋ณธ๋ฌธ

CodingTest/Python

BOJ_2805 : ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

Soom_1n 2022. 8. 20. 00:58

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2805๋ฒˆ: ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ

์ฒซ์งธ ์ค„์— ๋‚˜๋ฌด์˜ ์ˆ˜ N๊ณผ ์ƒ๊ทผ์ด๊ฐ€ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) ๋‘˜์งธ ์ค„์—๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‚˜๋ฌด์˜ ๋†’์ด์˜ ํ•ฉ์€ ํ•ญ์ƒ M๋ณด

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๋‚˜๋ฌด์˜ ์ˆ˜, ์›ํ•˜๋Š” ๋ชฉ์žฌ ๊ธธ์ด, ๋‚˜๋ฌด๋“ค์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ์–ด๋Š ๋†’์ด์˜ ์ ˆ๋‹จ๊ธฐ๋กœ ์ž˜๋ž์„๋•Œ ์ตœ๋Œ€ ๋†’์ด๋กœ ์ถฉ๋ถ„ํ•œ ๋ชฉ์žฌ๋ฅผ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ตฌํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

# python3 : 39% , pypy : ํ†ต๊ณผ
import sys
input = sys.stdin.readline

N, M = map(int,input().split())
arr = list(map(int,input().split()))
left, right = 1, max(arr)

while left <= right:
    mid = (left+right) // 2

    tree = 0
    for i in arr:
        if i > mid:
            tree += i - mid
    
    if tree >= M:
        left = mid + 1
    else:
        right = mid - 1
print(right)

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ ˆ๋‹จ๊ธฐ์˜ ๋†’์ด๋ฅผ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๊ตฌํ•œ๋‹ค.

 

๐Ÿ”ธ ์˜ค๋‹ต ์ฝ”๋“œ ๐Ÿ”ธ

# python3 :47% , pypy : 47%

import sys
input = sys.stdin.readline

N, M = map(int,input().split())
arr = list(map(int,input().split()))

arr.sort()

answer = arr[-1]
tree = 0

while tree < M: # ์ ˆ๋‹จ๊ธฐ์˜ ๋†’์ด(answer) ํ•˜๋‚˜์”ฉ ๋‚ฎ์ถ”๊ธฐ
    left = 0
    right = N-1
    answer -= 1
    
    while right > left: # ์ž˜๋ฆฌ๋Š” ๋‚˜๋ฌด์ค‘์— ๊ฐ€์žฅ ์ž‘์€ ์ธ๋ฑ์Šค ์ฐพ๊ธฐ
        mid = (left+right)//2
        if arr[mid] <= answer:
            left = mid+1
        else:
            right = mid
    tree += N - right
print(answer)

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ž˜๋ฆฌ๋Š” ๋‚˜๋ฌด์ค‘์— ๊ฐ€์žฅ ์ž‘์€ ์ธ๋ฑ์Šค๋ฅผ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ์ฐพ๋Š”๋‹ค.
  • ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ 1์”ฉ๋‚ฎ์ถ”๋ฉฐ ์ž˜๋ฆฌ๋Š” ๋‚˜๋ฌด์˜ ์–‘์„ ํ•ฉํ•œ๋‹ค.

๐Ÿ”ธ ๋‹ค๋ฅธ ์ฝ”๋“œ ๐Ÿ”ธ

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • pypy๊ฐ€์•„๋‹Œ python3๋กœ ํ’€์ดํ•œ ์ฝ”๋“œ์ด๋‹ค.
  • ์ •ํ™•ํ•˜์ง„ ์•Š์ง€๋งŒ Counter ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ์กฐ๊ฑด(์ ˆ๋‹จ๊ธฐ๋ณด๋‹ค ๋†’์€)์— ๋งž๋Š” ๋‚˜๋ฌด๋“ค์˜ ํ•ฉ์œผ๋กœ ํŒ๋ณ„ํ•˜๊ณ , ์ด๋ถ„ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 
  • ์ถœ์ฒ˜ : https://www.acmicpc.net/source/30566317

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์› ๋‹ค. ์ด๋ถ„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์—ฌ์„œ ๋งŽ์€ ์‹œ๊ฐ„์ดˆ๊ณผ์— ์‹œ๋‹ฌ๋ ธ๋‹ค.
  • ์ด๋ถ„ํƒ์ƒ‰์„ ์ ์šฉํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„๋„ ๋งŽ์ด ํ—ท๊น”๋ ค์„œ ํ‘ธ๋Š” ์‹œ๊ฐ„๋„ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค.
  • ์›๋ž˜ ํ’€์—ˆ๋˜ ๋‚˜๋ฌด ์ธ๋ฑ์Šค๋ฅผ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ์ฐพ๋Š” ์ฝ”๋“œ๋Š” python3, pypy๋‘˜๋‹ค ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ,
    ์ ˆ๋‹จ๊ธฐ ๋†’์ด๋ฅผ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ์ฐพ๋Š” ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”์„œ ๋Œ๋ ธ๋”๋‹ˆ pypy๋งŒ ์„ฑ๊ณตํ–ˆ๋‹ค.
  • python3๋กœ ํ†ต๊ณผํ•œ ๋ถ„๋“ค ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ collections ๋ชจ๋“ˆ์˜ Counter ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
    ํ•ด์„์ด ์™„๋ฒฝํ•˜์ง„ ์•Š์ง€๋งŒ ์กฐ๊ธˆ ์ดํ•ด๊ฐ€ ๋˜๊ธฐ๋„ ํ–ˆ๋‹ค. (์ง์ ‘ ๊ตฌํ˜„ํ•  ์—ผ๋‘๋Š” ์•ˆ๋‚ฌ๋‹ค)
  • ์ด ๋ฌธ์ œ๋Š” ์ด๋ถ„ํƒ์ƒ‰ ๋ง๊ณ ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜ํƒ์ƒ‰ ๋ฌธ์ œ์ธ๋ฐ, ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค. (์ถœ์ฒ˜)
  • ๋‚ด์ผ์ด๋ฉด solved.ac์˜ class 2 ์˜ ๋ชจ๋“ ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ๋œ๋‹ค. ์ด๋ฒˆ ๋ฌธ์ œ์ฒ˜๋Ÿผ ํ‘ธ๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๋ฌธ์ œ๋“ค์ด ๋งŽ์•„์งˆํ…๋ฐ, ์งง๊ฒŒ ํ’€๊ณ  ๋„˜๊ธฐ๋ คํ•˜์ง€๋ง๊ณ  ๋”ฑ 1์‹œ๊ฐ„ ์ง‘์ค‘ํ•ด์„œ ํ’€๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค.

728x90

'CodingTest > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1676 : ํŒฉํ† ๋ฆฌ์–ผ 0์˜ ๊ฐœ์ˆ˜  (0) 2022.08.21
BOJ_18111 : ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ  (0) 2022.08.21
BOJ_2108 : ํ†ต๊ณ„ํ•™  (0) 2022.08.18
BOJ_10866 : ๋ฑ  (0) 2022.08.17
BOJ_15828 : Router  (0) 2022.08.16