๐ฅ Gold4
https://www.acmicpc.net/problem/13975

โ 1์ฐจํ์ด
import sys
from collections import deque
input = sys.stdin.readline
n=int(input())
for _ in range(n):
m=int(input())
nums=sorted(list(map(int,input().strip().split())))
queue=deque(nums)
result=0
while len(queue)>=1:
if len(queue)==1:
print(result)
break
temp=queue[0]+queue[1]
queue.append(temp)
result+=temp
if queue:
queue.popleft() #0
queue.popleft() #1
#sort
queue=deque(sorted(list(queue)))
์ฒ์ ํ์ด๋ณด๋ ๊ณจ๋๋ฌธ์ ์ ๊ฒ์ ๋จน์์ง๋ง, ์๊ฐ๋ณด๋ค ๊ต์ฅํ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก ํ์ผ์ ํฉ์น๋ค. ๋๊ฐ์ฉ ์ต์์ ๋น์ฉ์ผ๋ก ํฉ์ณ์ ์์ฑ์ํค๊ธฐ ์ํด์ ๊ฐ์ฅ ์์ ํ์ผ๋ค๋ผ๋ฆฌ ๋ฌถ์ด๋๊ฐ๋ฉด ๋๋ค.
sort๋ฅผ ํด์ค ์ํ์์ ๊ฐ์ฅ ์์ ๋๊ฐ์ ํ์ผ์ ํฉ์ณ์(0,1๋ฒ์งธ) ํ๋์ ํ์ผ์ ์์ฑํด์ค๋ค ๋ ๋ณํฉ๋์ด์ด์ผํ๊ธฐ ๋๋ฌธ์, ํ์ ๋ฃ์ด์ค๋ค. ์๋ก ์์ฑ๋ ๊ฐ์ด ๋ค์ด์ค๊ณ ๋ฐ๋ณตํด์ ์ด ์์ ์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ ํ๋ฒ ์ ๋ ฌ์ ํด์ฃผ์ด์ผํ๋ค.
โจ ๋งจ์์ ์์๋ฅผ ๊บผ๋ด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์คํธ๊ฐ ์๋ FIFO ํ๋ฅผ ์ฌ์ฉํ์๋ค. ์ต์ข ์ ์ผ๋ก ํ์ผ 1๊ฐ๋ฅผ ์์ฑํ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด๋๋ค.
sort ์์ ์ ๋ฐ๋ณตํด์ ์ํํ๊ธฐ ๋๋ฌธ์, ์๊ฐ์ด๊ณผ๋ฅผ ์ข ์ฐ๋ คํ๊ธดํ๋๋ฐ , ์ญ์๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋ค..
- ์ด๊ธฐ ์ ๋ ฌ: O(m log m)
- ๋ฐ๋ณต ๋ฃจํ: ๋ฃจํ๋ ์ต๋ m-1 ๋ฒ ๋ฐ๋ณต๋๋ฉฐ, ๊ฐ ๋ฐ๋ณต๋ง๋ค ์ ๋ ฌ์ ์ํํฉ๋๋ค. ๊ฐ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(m log m)
- ์ด ์๊ฐ ๋ณต์ก๋: O((m-1) * m log m) = O(m^2 log m)
โ ์ ๋ตํ์ด
import sys
import heapq
input = sys.stdin.readline
n = int(input())
for _ in range(n):
m = int(input())
nums = list(map(int, input().strip().split()))
heapq.heapify(nums)
result = 0
while len(nums) > 1:
# ๋ ๊ฐ์ min๊ฐ ๊บผ๋ด๊ธฐ
first = heapq.heappop(nums)
second = heapq.heappop(nums)
# ๊ฒฐ๊ณผ์ ์ถ๊ฐ
temp = first + second
result += temp
# sum๊ฐ ๋ค์ heap์ ๋ฃ์ด์ฃผ๊ธฐ
heapq.heappush(nums, temp)
print(result)
1,2๋ฒ์งธ ์ต์๊ฐ์ ์ถ์ถํ๋ ๋ฌธ์ ๋ค๋ณด๋ ์ต์ํ์ผ๋ก ๋ณ๊ฒฝํด๋ณด์๋ค.
์ฝ๋๋ ๊ต์ฅํ ๊ฐ๊ฒฐํ๋ค. pop์ผ๋ก ๊บผ๋ธ ๊ฐ๋ค์ ๋ํด์ฃผ๊ณ ์๋ก ์์ฑ๋๊ฐ์ pushํด์ฃผ๋ ์์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
- ์ด๊ธฐ ํ ๋ณํ: O(m)
- ๋ฐ๋ณต ๋ฃจํ: O(m log m)
- ์ ์ฒด ์๊ฐ ๋ณต์ก๋: O(m log m)
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค-Python] ์ข์์ํธ : 2061๋ฒ (1) | 2024.06.12 |
---|---|
[๋ฐฑ์ค-Python] ํ์๋จธ์ : 1440๋ฒ (0) | 2024.06.12 |
[๋ฐฑ์ค-Python] ์จ๋ฐ๊ผญ์ง : 1697๋ฒ (0) | 2024.06.11 |
[๋ฐฑ์ค-Python] ๋์ดํธ์ ์ด๋ : 7562๋ฒ (0) | 2024.06.10 |
[๋ฐฑ์ค-Python] ์ด์๊ณ์ฐ : 2644๋ฒ (0) | 2024.06.10 |
๐ฅ Gold4
https://www.acmicpc.net/problem/13975

โ 1์ฐจํ์ด
import sys
from collections import deque
input = sys.stdin.readline
n=int(input())
for _ in range(n):
m=int(input())
nums=sorted(list(map(int,input().strip().split())))
queue=deque(nums)
result=0
while len(queue)>=1:
if len(queue)==1:
print(result)
break
temp=queue[0]+queue[1]
queue.append(temp)
result+=temp
if queue:
queue.popleft() #0
queue.popleft() #1
#sort
queue=deque(sorted(list(queue)))
์ฒ์ ํ์ด๋ณด๋ ๊ณจ๋๋ฌธ์ ์ ๊ฒ์ ๋จน์์ง๋ง, ์๊ฐ๋ณด๋ค ๊ต์ฅํ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก ํ์ผ์ ํฉ์น๋ค. ๋๊ฐ์ฉ ์ต์์ ๋น์ฉ์ผ๋ก ํฉ์ณ์ ์์ฑ์ํค๊ธฐ ์ํด์ ๊ฐ์ฅ ์์ ํ์ผ๋ค๋ผ๋ฆฌ ๋ฌถ์ด๋๊ฐ๋ฉด ๋๋ค.
sort๋ฅผ ํด์ค ์ํ์์ ๊ฐ์ฅ ์์ ๋๊ฐ์ ํ์ผ์ ํฉ์ณ์(0,1๋ฒ์งธ) ํ๋์ ํ์ผ์ ์์ฑํด์ค๋ค ๋ ๋ณํฉ๋์ด์ด์ผํ๊ธฐ ๋๋ฌธ์, ํ์ ๋ฃ์ด์ค๋ค. ์๋ก ์์ฑ๋ ๊ฐ์ด ๋ค์ด์ค๊ณ ๋ฐ๋ณตํด์ ์ด ์์ ์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ ํ๋ฒ ์ ๋ ฌ์ ํด์ฃผ์ด์ผํ๋ค.
โจ ๋งจ์์ ์์๋ฅผ ๊บผ๋ด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์คํธ๊ฐ ์๋ FIFO ํ๋ฅผ ์ฌ์ฉํ์๋ค. ์ต์ข ์ ์ผ๋ก ํ์ผ 1๊ฐ๋ฅผ ์์ฑํ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด๋๋ค.
sort ์์ ์ ๋ฐ๋ณตํด์ ์ํํ๊ธฐ ๋๋ฌธ์, ์๊ฐ์ด๊ณผ๋ฅผ ์ข ์ฐ๋ คํ๊ธดํ๋๋ฐ , ์ญ์๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋ค..
- ์ด๊ธฐ ์ ๋ ฌ: O(m log m)
- ๋ฐ๋ณต ๋ฃจํ: ๋ฃจํ๋ ์ต๋ m-1 ๋ฒ ๋ฐ๋ณต๋๋ฉฐ, ๊ฐ ๋ฐ๋ณต๋ง๋ค ์ ๋ ฌ์ ์ํํฉ๋๋ค. ๊ฐ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(m log m)
- ์ด ์๊ฐ ๋ณต์ก๋: O((m-1) * m log m) = O(m^2 log m)
โ ์ ๋ตํ์ด
import sys
import heapq
input = sys.stdin.readline
n = int(input())
for _ in range(n):
m = int(input())
nums = list(map(int, input().strip().split()))
heapq.heapify(nums)
result = 0
while len(nums) > 1:
# ๋ ๊ฐ์ min๊ฐ ๊บผ๋ด๊ธฐ
first = heapq.heappop(nums)
second = heapq.heappop(nums)
# ๊ฒฐ๊ณผ์ ์ถ๊ฐ
temp = first + second
result += temp
# sum๊ฐ ๋ค์ heap์ ๋ฃ์ด์ฃผ๊ธฐ
heapq.heappush(nums, temp)
print(result)
1,2๋ฒ์งธ ์ต์๊ฐ์ ์ถ์ถํ๋ ๋ฌธ์ ๋ค๋ณด๋ ์ต์ํ์ผ๋ก ๋ณ๊ฒฝํด๋ณด์๋ค.
์ฝ๋๋ ๊ต์ฅํ ๊ฐ๊ฒฐํ๋ค. pop์ผ๋ก ๊บผ๋ธ ๊ฐ๋ค์ ๋ํด์ฃผ๊ณ ์๋ก ์์ฑ๋๊ฐ์ pushํด์ฃผ๋ ์์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
- ์ด๊ธฐ ํ ๋ณํ: O(m)
- ๋ฐ๋ณต ๋ฃจํ: O(m log m)
- ์ ์ฒด ์๊ฐ ๋ณต์ก๋: O(m log m)
'๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค-Python] ์ข์์ํธ : 2061๋ฒ (1) | 2024.06.12 |
---|---|
[๋ฐฑ์ค-Python] ํ์๋จธ์ : 1440๋ฒ (0) | 2024.06.12 |
[๋ฐฑ์ค-Python] ์จ๋ฐ๊ผญ์ง : 1697๋ฒ (0) | 2024.06.11 |
[๋ฐฑ์ค-Python] ๋์ดํธ์ ์ด๋ : 7562๋ฒ (0) | 2024.06.10 |
[๋ฐฑ์ค-Python] ์ด์๊ณ์ฐ : 2644๋ฒ (0) | 2024.06.10 |