[BOJ][๐ก4][๋ฐฑ์ค#14698] ์ ์ํ๋๋ ์ฌ๋ผ์ ์ฐ๊ตฌ์์๋ ๊ฑด์ ๋ํ์ฌ (Hard)
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์๋ ? ๋ด ์ด๋ฆ์ ntopia! ๋๋ ์๋ ์ง๊ตฌ์ ์ด๊ณ ์๋ ํ๋ฒํ 20๋ ์ฒญ๋ ์ด์์ด. ์ด๋ ๋ ๊ธธ์ ๊ฑท๋ค๊ฐ ๊ดดํ์ ์นผ์ ์ฐ๋ ค ์ฃฝ์ด๋ฒ๋ ธ์ด. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ ๋ฌด์จ ์ผ์ด๋! ์ ์ ์ ์ฐจ๋ ค๋ณด๋ ์ด์ธ๊ณ์ ๋จ์ด์ ธ ๋ฒ๋ ธ์ง ๋ญ์ผ. ์ฌ๊ธฐ์์ ๋๋ ์ฌ๋ผ์์ ์ ๋ฌธ์ผ๋ก ์ฐ๊ตฌํ๋ ์ฌ๋ผ์ ์ฐ๊ตฌ์๊ฐ ๋์ด๋ฒ๋ฆฐ ๊ฒ ๊ฐ์. ๋๋ ์ง๊ธ ์์ฃผ ์ค์ํ ์ฐ๊ตฌ๋ฅผ ์งํํ๊ณ ์์ด. ์ด ์ฐ๊ตฌ๊ฐ ์ฑ๊ณตํ๋ฉด ๋๋ ๋ด๊ฐ ์ด๋ ์ธ๊ณ๋ก ๋์๊ฐ ์ ์๊ฒ ๋ ๊ฑฐ์ผ. ์ด ์ฐ๊ตฌ๋ฅผ ๋์์ฃผ์ง ์๊ฒ ๋? ์ด๊ณณ์ ์ฌ๋ผ์์ ๋ชจ๋ ์ฌ๋ผ์ ์๋์ง๋ผ๋ ๊ฒ์ ๊ฐ๊ณ ์๊ณ ๊ทธ ์์ 2 ์ด์์ ์์ฐ์๋ก ํํ๋ผ. ๋๋ ์ฌ๋ผ์์ ํฉ์ฑํ์ ๋ ์ฌ๋ผ์ ์๋์ง๊ฐ ์ด๋ป๊ฒ ๋ณํํ๋์ง์ ๋ํด ์ฐ๊ตฌํ๊ณ ์์ด. ์ฌ๋ผ์ ํฉ์ฑ ๊ณผ์ ์ 2๋ง๋ฆฌ๋ฅผ ํฉ์ฑํด์ 1๋ง๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ด๋ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ. A๋งํผ์ ์ฌ๋ผ์ ์๋์ง๋ฅผ ๊ฐ์ง ์ฌ๋ผ์๊ณผ B๋งํผ์ ์ฌ๋ผ์ ์๋์ง๋ฅผ ๊ฐ๊ณ ์๋ ์ฌ๋ผ์์ด ์์๋ค๊ณ ํด๋ณด์. ์ด ์ฌ๋ผ์ 2๋ง๋ฆฌ๋ฅผ ํฉ์ฑํ๋ฉด ์ฌ๋ผ์ ์๋์ง๊ฐ A ร B ์ธ ์ฌ๋ผ์์ ๋ง๋ค ์ ์์ด. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ผ์ ํฉ์ฑ ๊ธฐ์ ์ด ์์ง ์๋ฒฝํ์ง ์์์ ์ฌ๋ผ์์ ํฉ์ฑํ ๋๋ง๋ค ํฌ๋ํฐ ์ ๊ธฐ ์๋์ง๊ฐ ํ์ํด. ๊ตฌ์ฒด์ ์ผ๋ก, A๋งํผ์ ์ฌ๋ผ์ ์๋์ง๋ฅผ ๊ฐ์ง ์ฌ๋ผ์๊ณผ B๋งํผ์ ์ฌ๋ผ์ ์๋์ง๋ฅผ ๊ฐ์ง ์ฌ๋ผ์์ ํฉ์ฑํ๋ ค๋ฉด A ร B ๋งํผ์ ์ ๊ธฐ ์๋์ง๊ฐ ํ์ํด.
์๋์ง๊ฐ 4์ธ ์ฌ๋ผ์๊ณผ ์๋์ง๊ฐ 6์ธ ์ฌ๋ผ์์ ํฉ์ฑํ ๋ชจ์ต. 4 ร 6์ ์ ๊ธฐ ์๋์ง๋ฅผ ์ฌ์ฉํด ์ฌ๋ผ์ ์๋์ง๊ฐ 24์ธ ์ฌ๋ผ์์ด ํฉ์ฑ๋์๋ค. ๋์๊ฒ ์ง๊ธ N๋ง๋ฆฌ์ ์ฌ๋ผ์์ด ์์ด. ์ด ์ฌ๋ผ์๋ค์ ๋ชจ๋ ์ ์ ํ ํฉ์ฑํด์ 1๋ง๋ฆฌ์ ์ฌ๋ผ์์ผ๋ก ๋ง๋ค๋ ค๊ณ ํด. ๊ทธ๋ฐ๋ฐ ๋ด๊ฐ ์์๋ ์ฐ๊ตฌ์์์ ๊ฐ ํฉ์ฑ ๋จ๊ณ๋ง๋ค ํ์ํ ์ ๊ธฐ ์๋์ง๋ค์ ๋ชจ๋ ๊ณฑํ ๊ฐ์ ๋์๊ฒ ๋น์ฉ์ผ๋ก ์ฒญ๊ตฌํ๊ฒ ๋ค๊ณ ํ์ง ๋ญ์ผ. ๊ทธ๋์ ์ด ๊ฐ์ด ์ต์๊ฐ ๋๋๋ก ํฉ์ฑ์ ์ ์ ํ ์ํํ๋ ๊ฒ์ด ๋ด ์ฐ๊ตฌ์ ๋ชฉํ์ผ. ๋ด ์ฐ๊ตฌ๋ฅผ ๋์์ค! ๋ถํ์ด์ผ!!
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ์ T ๊ฐ ์ฃผ์ด์ง๊ณ , ์ด์ด์ T ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ ๋ฒ์งธ ์ค์๋ ์ฌ๋ผ์์ ์ N (1 โค N โค 60)์ด ์ฃผ์ด์ง๊ณ , ๋ ๋ฒ์งธ ์ค์๋ N ๊ฐ์ ์์ฐ์๊ฐ ์ฃผ์ด์ง๋ค. i๋ฒ์งธ ์์ฐ์ Ci (2 โค Ci โค 2 ร 1018) ๋ i๋ฒ์งธ ์ฌ๋ผ์์ ์ฌ๋ผ์ ์๋์ง๋ฅผ ๋ํ๋ธ๋ค. ๋๊น์ง ํฉ์ฑํ๊ณ ๋ ํ์ ์๊ธฐ๋ ์ฌ๋ผ์์ ์๋์ง์ ์์ด 2 ร 1018 ์ดํ๋ผ๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค. ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค์ ๋ํ N ์ ์ดํฉ์ด 1, 000, 000์ ๋์ง ์์์ด ๋ณด์ฅ๋๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ์ฌ๋ผ์์ ๋๊น์ง ํฉ์ฑํ์ ๋ ์ฒญ๊ตฌ๋ ๋น์ฉ์ ์ต์๊ฐ์ 1, 000, 000, 007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค. ์ ๊ธฐ ์๋์ง๊ฐ ์ ํ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์ 1 ์ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
2
5
3 10 2 8 14
1
13
์ถ๋ ฅ
270950400
1
My Sol
import sys
input = sys.stdin.readline
from heapq import heappop, heappush
T = int(input())
for _ in range(T):
N = int(input())
arr = list(map(int, input().split()))
H = []
for a in arr:
heappush(H, a)
ret = 1
while N > 1:
a, b = heappop(H), heappop(H)
ret = (ret*a*b) % 1000000007
heappush(H, a*b)
N -= 1
print(ret)
์ฐ์ ์์ ํ์ธ heap์ ์ฌ์ฉํ๋ฉด ๋๋ฌด๋ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค. ์ฐ์ ๋์ ๊ณฑ์ ์ต์๊ฐ์ ๊ตฌํ๊ธฐ ์ํด์๋ ๊ฐ์ฅ ์์ ๊ฐ๋ค๋ถํฐ ๊ณฑํด๋๊ฐ์ผ ํจ์ ์ดํดํด์ผ ํ๋ค. ์ด๋ ํ ์๋ฅผ ํ ๋ฒ ๊ณฑํด๋์ผ๋ฉด, ์ดํ์ ๊ฒฐ๊ณผ์๋ ๊ณ์ ๊ฐ์ค์น์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์์ ๋ ์๋ฅผ ๊ณฑํ๋ฉด์ ๊ฐ์๋๋ฅผ ์ฒ์ฒํ ์ฌ๋ ค์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
- heqp ๋ชจ๋์ ์ฌ์ฉํ๋ค. ์ ๋ ฅ์ด ํด ์ ์๊ธฐ ๋๋ฌธ์ sys.stdin.readline์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ค.
- ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ๋ฆฌ์คํธ๋ฅผ heapq์ ๋ฃ๋๋ค. ์ฌ๊ธฐ์ heqppop์ ํ๋ฉด ๊ฐ์ฅ ์์ ์๊ฐ ๋์จ๋ค.
- 1๋ก ์ด๊ธฐํํ
ret
์ ๊ฐ์ฅ ์์ ๋ ๊ฐ์ ๊ณฑํ๊ณ , ์ด ๋ ๊ฐ์ ๊ณฑํ ํฉ์ฑ๊ฐ์ ๋ค์heap
์ ๋ฃ๋๋ค. ์ด๋ ๊ฒ ๊ธธ์ด๊ฐ 1์ด ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค. - ์ด ๊ณผ์ ์์
ret
์ด ๋๋ฌด ์ปค์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด 1000000007์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ณ์ret
์ ์ ์ฅํ๋ค. ret
์ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ