[BOJ][๐ŸŸก4][๋ฐฑ์ค€#14698] ์ „์ƒํ–ˆ๋”๋‹ˆ ์Šฌ๋ผ์ž„ ์—ฐ๊ตฌ์ž์˜€๋˜ ๊ฑด์— ๋Œ€ํ•˜์—ฌ (Hard)

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #14698


๋ฌธ์ œ

์•ˆ๋…•? ๋‚ด ์ด๋ฆ„์€ 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์„ ์‚ฌ์šฉํ•˜๋ฉด ๋„ˆ๋ฌด๋„ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์šฐ์„  ๋ˆ„์  ๊ณฑ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’๋“ค๋ถ€ํ„ฐ ๊ณฑํ•ด๋‚˜๊ฐ€์•ผ ํ•จ์„ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ์–ด๋– ํ•œ ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๊ณฑํ•ด๋†“์œผ๋ฉด, ์ดํ›„์˜ ๊ฒฐ๊ณผ์—๋„ ๊ณ„์† ๊ฐ€์ค‘์น˜์— ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ž‘์€ ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•˜๋ฉด์„œ ๊ฐ€์†๋„๋ฅผ ์ฒœ์ฒœํžˆ ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  1. heqp ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์ด ํด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— sys.stdin.readline์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ๋ฆฌ์ŠคํŠธ๋ฅผ heapq์— ๋„ฃ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ heqppop์„ ํ•˜๋ฉด ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.
  3. 1๋กœ ์ดˆ๊ธฐํ™”ํ•œ ret์— ๊ฐ€์žฅ ์ž‘์€ ๋‘ ๊ฐ’์„ ๊ณฑํ•˜๊ณ , ์ด ๋‘ ๊ฐ’์„ ๊ณฑํ•œ ํ•ฉ์„ฑ๊ฐ’์„ ๋‹ค์‹œ heap์— ๋„ฃ๋Š”๋‹ค. ์ด๋ ‡๊ฒŒ ๊ธธ์ด๊ฐ€ 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  4. ์ด ๊ณผ์ •์—์„œ ret์ด ๋„ˆ๋ฌด ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด 1000000007์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์† ret์— ์ €์žฅํ•œ๋‹ค.
  5. ret์„ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ