Skip to content

Commit e5e087c

Browse files
authored
Merge pull request #220 from AlgorithmStudy-Allumbus/YoonYn9915
YoonYn9915/ 6์›” 1์ฃผ์ฐจ/ 3๋ฌธ์ œ
2 parents 17cd42b + a96d456 commit e5e087c

3 files changed

+125
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
'''
2+
์š”๊ตฌ์‚ฌํ•ญ
3+
1. ๋งค์šฐ ๋งŽ์€ ์ˆซ์ž ์นด๋“œ ๋ฌถ์Œ์ด ์ฑ…์ƒ ์œ„์— ๋†“์—ฌ ์žˆ๋‹ค. ์ด๋“ค์„ ๋‘ ๋ฌถ์Œ์”ฉ ๊ณจ๋ผ ์„œ๋กœ ํ•ฉ์ณ๋‚˜๊ฐˆ ๋•Œ, ์ตœ์†Œํ•œ ๋ช‡ ๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•œ์ง€๋ฅผ ๊ณ„์‚ฐ
4+
5+
1. ์•„์ด๋””์–ด
6+
- A๊ฐœ, B๊ฐœ ๋‘ ๋ฌถ์Œ์˜ ์นด๋“œ๋ฅผ ๋น„๊ตํ•˜๋Š”๋ฐ A+B๋ฒˆ ๋น„๊ตํ•ด์•ผ ํ•จ.
7+
- ๋น„๊ตํ•œ ํšŸ์ˆ˜๋ฅผ ๋ˆ„์ ์‹œ์ผœ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ ๋น„๊ตํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ๋“ค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•จ.
8+
- A, B, C 3๊ฐœ์˜ ์นด๋“œ ๋ฌถ์Œ์ด ์žˆ๊ณ  A < B < C๋ผ๋ฉด, (A+B) + ((A+B) + C)๊ฐ€ ์ตœ์†Œ๊ฐ’์ด๋‹ค.
9+
10+
2. ์‹œ๊ฐ„๋ณต์žก๋„
11+
- (1 โ‰ค N โ‰ค 100,000)
12+
- O(N + (N-1) * logN), ๋Œ€๋žต O(NlogN)์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ ๋งŒ์กฑ.
13+
14+
3. ๊ตฌํ˜„
15+
3.1 ์ž…๋ ฅ๋ฐ›๊ธฐ
16+
3.2 ์นด๋“œ ๋ฌถ์Œ ์ •๋ ฌ(์šฐ์„ ์ˆœ์œ„ ํ์— ์ €์žฅ)
17+
3.3 ๊ฐ€์žฅ ์นด๋“œ๊ฐ€ ์ ์€ ๋ฌถ์Œ 2๊ฐœ๋ฅผ ๋ฝ‘์•„ ๋”ํ•œ ๊ฐ’์„ ์ •๋‹ต๋ณ€์ˆ˜์— ๋ˆ„์ ์‹œํ‚ค๊ณ  ๋‹ค์‹œ ์šฐ์„ ์ˆœ์œ„ํ์— ์ €์žฅ
18+
3.4 ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ํ•˜๋‚˜ ๋‚จ์„๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
19+
3.5 ์ •๋‹ต ์ถœ๋ ฅ
20+
'''
21+
22+
import sys
23+
import heapq
24+
25+
inp = sys.stdin.readline
26+
27+
N = int(inp().strip())
28+
arr = []
29+
answer = 0
30+
31+
for _ in range(N):
32+
arr.append(int(inp().strip()))
33+
34+
# ๋งค๋ฒˆ ์ตœ์†Œ ์นด๋“œ ๋ฌถ์Œ 2๊ฐœ๋ฅผ ๋ฝ‘๊ธฐ ์œ„ํ•ด heap ์‚ฌ์šฉ
35+
heapq.heapify(arr)
36+
37+
while len(arr) > 1:
38+
min1 = heapq.heappop(arr)
39+
min2 = heapq.heappop(arr)
40+
41+
answer += min1 + min2
42+
heapq.heappush(arr, min1 + min2)
43+
44+
print(answer)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
def dfs(x, y):
3+
if graph[x][y] == '-':
4+
graph[x][y] = 1
5+
for _y in [1, -1]:
6+
Y = y + _y
7+
if (Y > 0 and Y < m) and graph[x][Y] == '-':
8+
dfs(x, Y)
9+
if graph[x][y] == '|':
10+
graph[x][y] = 1
11+
for _x in [1, -1]:
12+
X = x + _x
13+
if (X > 0 and X < n) and graph[X][y] == '|':
14+
dfs(X, y)
15+
16+
17+
n, m = map(int, input().split())
18+
graph = []
19+
for _ in range(n):
20+
graph.append(list(input()))
21+
22+
count = 0
23+
for i in range(n):
24+
for j in range(m):
25+
if graph[i][j] == '-' or graph[i][j] == '|':
26+
dfs(i, j)
27+
count += 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
'''
2+
์š”๊ตฌ์‚ฌํ•ญ
3+
1. A๋งŒํผ์˜ ์—๋„ˆ์ง€๋ฅผ ๊ฐ€์ง„ ์Šฌ๋ผ์ž„๊ณผ B๋งŒํผ์˜ ์—๋„ˆ์ง€๋ฅผ ๊ฐ€์ง„ ์Šฌ๋ผ์ž„์„ ํ•ฉ์„ฑํ•˜๋ ค๋ฉด A ร— B ๋งŒํผ์˜ ์—๋„ˆ์ง€ ํ•„์š”.
4+
2. N๋งˆ๋ฆฌ์˜ ์Šฌ๋ผ์ž„๋“ค์„ ์ ์ ˆํžˆ ํ•ฉ์„ฑํ•ด์„œ 1๋งˆ๋ฆฌ์˜ ์Šฌ๋ผ์ž„์œผ๋กœ ๋งŒ๋“ค๋•Œ, ํ•„์š”ํ•œ ์—๋„ˆ์ง€ ๊ฐ’์„ ๋ชจ๋‘ ๊ณฑํ•œ ๊ฐ’์„ ์ตœ์†Œ๋กœ ๋งŒ๋“ ๋‹ค.
5+
3. ์Šฌ๋ผ์ž„์„ ๋ชจ๋‘ ํ•ฉ์„ฑํ–ˆ์„ ๋•Œ ์ฒญ๊ตฌ๋  ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ 1, 000, 000, 007๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์—๋„ˆ์ง€๊ฐ€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—” 1 ์„ ์ถœ๋ ฅํ•œ๋‹ค.
6+
7+
1. ์•„์ด๋””์–ด
8+
๊ณฑ์˜ ๋ˆ„์ ๊ณฑ์ด ์ตœ์†Œ๊ฐ€ ๋˜๊ฒŒ ํ•˜๋ ค๋ฉด ๊ณฑ์…ˆ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•ด์•ผ ํ•จ. ์ฆ‰ ํฐ ์ˆ˜๋ฅผ ๊ฐ€์žฅ ์ ๊ฒŒ ๊ณฑํ•˜๊ณ 
9+
๋˜๋„๋ก ์ž‘์€์ˆ˜ X ์ž‘์€์ˆ˜ ํ˜•ํƒœ๋กœ ํ’€์ด. ๋”ฐ๋ผ์„œ ๊ฐ ๊ฒฝ์šฐ๋งˆ๋‹ค ๊ฐ€์žฅ ์ž‘์€ ๋‘ ์ˆ˜๋ฅผ ๊ทธ๋ฆฌ๋””ํ•˜๊ฒŒ ๋ฝ‘์•„์„œ ๊ณฑํ•˜๊ณ  ๋ˆ„์ ๊ณฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
10+
11+
2. ์‹œ๊ฐ„๋ณต์žก๋„
12+
์Šฌ๋ผ์ž„ ์ˆ˜ N (1 โ‰ค N โ‰ค 60), i๋ฒˆ์งธ ์Šฌ๋ผ์ž„์˜ ์—๋„ˆ์ง€ Ci (2 โ‰ค Ci โ‰ค 2 ร— 1018)์ผ๋•Œ,
13+
๋ชจ๋“  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•œ N ์˜ ์ดํ•ฉ์ด 1, 000, 000์„ ๋„˜์ง€ ์•Š์Œ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ 500,000.
14+
์ฆ‰ O(test_case * (N-1)) == O(500,000 * 59)๋กœ ๋งŒ์กฑ.
15+
16+
3. ๊ตฌํ˜„
17+
3-1. ์ž…๋ ฅ๋ฐ›๊ธฐ
18+
3-2. N-1๋ฒˆ ๊ฐ€์žฅ ์ž‘์€ ๋‘ ์ˆ˜๋ฅผ ๋ฝ‘๋Š”๋‹ค.
19+
3-3. ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•˜๊ณ  ์ •๋‹ต๋ณ€์ˆ˜์— ๋ˆ„์ ์‹œํ‚จ๋‹ค.
20+
3-4. ๊ณฑํ•œ ๋‘ ์Šฌ๋ผ์ž„์„ ์ œ๊ฑฐํ•˜๊ณ , ์ƒˆ ์Šฌ๋ผ์ž„์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
21+
3-5. ์ •๋‹ต ์ถœ๋ ฅ
22+
23+
'''
24+
25+
26+
import heapq
27+
import sys
28+
29+
inp = sys.stdin.readline
30+
MOD = 1000000007
31+
32+
test_case = int(inp())
33+
34+
for _ in range(test_case):
35+
N = int(inp())
36+
arr = list(map(int, inp().split()))
37+
38+
if N == 1:
39+
print(1)
40+
continue
41+
42+
hq = []
43+
for num in arr:
44+
heapq.heappush(hq, num)
45+
46+
result = 1
47+
while len(hq) > 1:
48+
a = heapq.heappop(hq)
49+
b = heapq.heappop(hq)
50+
energy = a * b
51+
result = (result * energy) % MOD
52+
heapq.heappush(hq, energy)
53+
54+
print(result)

0 commit comments

Comments
ย (0)