[SWEA] 13428. ์ซ์ ์กฐ์(python)
๐๋ฌธ์
๐ช์์ด๋์ด
- ์ ๋์ดํ๊ธฐ
์ธ๋ฑ์ค๋ณ๋ก ๊ฒ์ฌํ๋ฉด์ ์ ๋ ฅ๋ string[i]์ ์์ ์(์ต์๊ฐ์ ๊ฒฝ์ฐ)/ํฐ ์(์ต๋๊ฐ์ ๊ฒฝ์ฐ) ๋น๊ตํ๋ค๊ฐ ํด๋น์ธ๋ฑ์ค์ ๊ฐ์๊ฐ ์๊ฐ ๋ค๋ฅด๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ค๋ค. string์ ์์ ์์ ํฐ ์๋ฅผ ๋น๊ตํ๊ธฐ์ํ์ฌ min heap๊ณผ max heap์ ์ฌ์ฉํ์๋ค - 0 ์ฒ๋ฆฌํ๊ธฐ
์ ๋ ฅ๊ฐ์ด 0์ด ๋ค์ด์จ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ธ๋ฑ์ค 0์ โ0โ์ด ์ฌ ์ ์๋ค. ๋ฐ๋ผ์ ์ต์๊ฐ์ ์ฒ๋ฆฌํ ๋ min heap์ 0์ด ์์ ์ ์์ผ๋ ์ธ๋ฑ์ค 0์ ๊ฒ์ฌ ํ์ min heap์ 0์ ๋ฃ๋๋ก ํ์๋ค. max heap์ heap์ ์์ฑํ ๋ 0์ ๋ฃ์ด๋ ์๊ด์ด ์์ผ๋ ํจ์์ ์ฌ์ฌ์ฉ์ ์ํ์ฌ max heap์์ฑ์์ 0์ ๋ฃ์ด์ฃผ์ง ์์๋ค. - ์๋ฆฌ ๋ฐ๊พธ๊ธฐ
์ค๋ณต๋ ์๊ฐ ์ ๋ ฅ๊ฐ์ ์์ผ๋ฉด ์๊ด์ด ์๋๋ฐ ์ค๋ณต๋ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋ฉ๋ฆฌ์๋ ์ธ๋ฑ์ค์ ๊ฐ๊ณผ ๋ฐ๊ฟ์ผํ๋ค. ๋ฐ๋ผ์ ํด๋น ๊ฐ์ด ๋ช ๋ฒ ์ธ๋ฑ์ค์ ์๋์ง ์๊ธฐ ์ํ์ฌ defaultdict์ ์ฌ์ฉํ์๋ค.
506060
์ด ๋ค์ด์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ์ต์๊ฐ์ผ๋ก500066
์ด ๋์์ผ ํ๊ธฐ ๋๋ฌธ์ โ0โ์ด ์กด์ฌํ๋ ์ธ๋ฑ์ค ์ค์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ณ ์ค๊ธฐ์ํ์ฌ index_dic[โ0โ][-1]์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
๐ฅ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from collections import defaultdict
from heapq import heappush,heappop
def Find_val(string,heap,sign):
answer=list(string)
for i,num in enumerate(string):
if heap:
val = str(heappop(heap)*sign)
if num!=val:
inx = index_dic[val][-1]
answer[inx]=answer[i]
answer[i]=val
break
if i==0 and index_dic['0']:
for _ in index_dic['0']:
heappush(heap,0)
return ''.join(answer)
T=int(input())
for tc in range(1,T+1):
string = input()
min_heap, max_heap=[],[]
index_dic=defaultdict(list)
for inx,num in enumerate(string):
if num !='0':
heappush(min_heap,int(num))
heappush(max_heap,int(num)*(-1))
index_dic[num].append(inx)
min_answer=Find_val(string,min_heap,1)
max_answer=Find_val(string,max_heap,-1)
print('#{} {} {}'.format(tc,min_answer,max_answer))
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.