๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 1655 ๊ฐ€์šด๋ฐ๋ฅผ๋งํ•ด์š” (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2022. 6. 14. 12:47

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

 

1655๋ฒˆ: ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”

์ฒซ์งธ ์ค„์—๋Š” ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์น˜๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N์ค„์— ๊ฑธ์ณ์„œ ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์น˜๋Š” ์ •์ˆ˜๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ •์ˆ˜๋Š” -1

www.acmicpc.net

์–ด๋ฆฐ์ด์—๊ฒ ๋งค์šฐ ์–ด๋ ค์šด ๊ฒŒ์ž„์ด๋‹ค. ์‹œ๊ฐ„์ œํ•œ์ด 0.1์ดˆ ์ธ๊ฑธ ๋ณด๋‹ˆ ๊ธฐ์กด ์ •๋ ฌ ๋ฐฉ์‹์œผ๋กœ๋Š” ํ•ด๊ฒฐ์ด ํž˜๋“ค ๊ฑฐ ๊ฐ™๋‹ค.

์‚ฌ์‹ค๋ฌธ์ œ ํ’€๊ธฐ ์ „์— ์šฐ์„ ์ˆœ์œ„ ํ ๋ฌธ์ œ ์ธ๊ฑธ ์•Œ๊ณ  ์žˆ์–ด์„œ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ์ ์šฉํ• ์ง€ ์ƒ๊ฐํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ์ •ํ•œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € pop ๋˜๋Š” ํ๋‹ค.

๊ทผ๋ฐ ์˜ˆ์ œ ์ถœ๋ ฅ ๋ถ€๋ถ„์„ ๋ณด๋ฉด 1 1 2 2 ๊ฐ™์ด ์ค‘๋ณต๋œ ๊ฐ’์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹จ์ˆœํžˆ pop์„ ํ•˜๋Š” ๊ฑด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐ. ์ค‘๊ฐ„์„ ์˜๋ฏธํ•˜๋Š” ๊ฐ’์„ ์ฐพ๊ธฐ ํž˜๋“ค์–ด ํ๋ฅผ ๋‘ ๊ฐœ ์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ƒ๊ฐํ–ˆ๋‹ค.

 

ํ’€์ด ๊ณผ์ •

์˜ˆ๋ฅผ ๋“ค์–ด 1 2 4 5 6 9 ๊ฐ™์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์„ ๋ณด๋ฉด, ์ค‘๊ฐ„๊ฐ’์€ 4์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๋ฉด 1 2 4 / 5 6 9 ๊ฐ€ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ 4๋Š” ์™ผ์ชฝ ๋ถ€๋ถ„์—์„œ ์ œ์ผ ํฐ ๊ฐ’์ด๊ณ , 5๋Š” ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์—์„œ ์ œ์ผ ์ž‘์€ ๊ฐ’์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ ํฐ ๊ฐ’์€ ์ „์ฒด ๋ฆฌ์ŠคํŠธ์—์„œ ์ค‘๊ฐ„๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค.

์ด๊ฒƒ์„ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ ์šฉํ•˜๋ฉด ์™ผ์ชฝ ๋ถ€๋ถ„์€ ์ตœ๋Œ€ ํž™, ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์€ ์ตœ์†Œ ํž™์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๋ฐ์ดํ„ฐ ์ž…๋ ฅ์€ ์™ผ์ชฝ๋ถ€ํ„ฐ ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ ํž™์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ด๋•Œ ์ฃผ์˜ํ•  ์ ์„ ์ž…๋ ฅ ํ›„ ์™ผ์ชฝ ๋ถ€๋ถ„์˜ ์ตœ๋Œ“๊ฐ’์ด ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์˜ ์ตœ์†Ÿ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ๋‘ ๊ฐ’์„ ๊ตํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด [1, 3, 6] / [8, 9]์—์„œ 4๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด [1, 3, 6] / [4, 8, 9]๊ฐ€ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ 6๊ณผ 4๋ฅผ ๊ตํ™˜ํ•ด์ฃผ๋ฉด [1, 3, 4] / [6, 8, 9] ์ด๋ ‡๊ฒŒ ์™ผ์ชฝ ๋ถ€๋ถ„์—์„œ ๊ณ„์† ์ค‘๊ฐ„๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ „์ฒด ์ฝ”๋“œ

import heapq
import sys

max_heap = []
min_heap = []
input = sys.stdin.readline
N = int(input().rstrip())

for i in range(N):
    x = int(input().rstrip())
    if i % 2 == 0:
        heapq.heappush(max_heap,-x)
    else:
        heapq.heappush(min_heap,x)

    if max_heap and min_heap and -max_heap[0] > min_heap[0]:
        maxh_value = -heapq.heappop(max_heap)
        minh_value = heapq.heappop(min_heap)

        heapq.heappush(max_heap,-minh_value)
        heapq.heappush(min_heap,maxh_value)

    print(-max_heap[0])

 ํŒŒ์ด์ฌ์— ์žˆ๋Š” heapq๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“  ํž™์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์†Œ ํž™์ด๋‹ค.

๋”ฐ๋ผ์„œ push ํ•  ๋•Œ ๊ฐ’์„ ์Œ์ˆ˜๋กœ ๋งŒ๋“ค๋ฉด ์ตœ๋Œ€ ํž™์œผ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๊ฐ’์„ ๊ตํ™˜ํ•  ๋•Œ ์ตœ๋Œ€ ํž™๊ณผ ์ตœ์†Œ ํž™์— ๊ฐ’์ด ์กด์žฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ if๋ฌธ์— ์กฐ๊ฑด์„ ๋„ฃ์–ด์ค€๋‹ค.