swea 1244 [S/W ๋ฌธ์ ํด๊ฒฐ ์์ฉ] 2์ผ์ฐจ - ์ต๋ ์๊ธ
์ฌ์ฉ์ธ์ด : PYTHON
ํ์ด
๊ตฌํ์ ์ํ ์๊ฐ
๋ฐฑํธ๋ํน์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ณต์์ด ํ์ํ๋ค.
๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ฉฐ goal(์ฃผ์ด์ง ์ซ์๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฐ)๊ณผ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ด ์ ๋ต์ด๋ค.
๐ก goal : ์ด๋ํ์ ์ ํ์ด ์๋ค๊ณ ํ ๋, ์ซ์๋ฅผ swapํด์ ๋๋ฌํ ์ ์๋ ์ต๋๊ฐ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฐ์ด๋ค.
๋ฐฑํธ๋ํน
์ซ์์นด๋ 1,2,3,4๊ฐ ์๋ค๊ณ ํ ๋ ๋ ๋ฒ ๊ตํํ ์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
(xํ์๋ ์ค๋ณต๋๋ ๊ฒฝ์ฐ)
๋ฐ๋ก ์ง์ ์ ๊ตํํ ๊ฒฝ์ฐ๋ณด๋ค ๋ค์ ๊ฒฝ์ฐ๋ง ์กฐํํ๋ฉด ์ค๋ณต์์ด ๊ตํํ ์ ์๋ค.
๋ฐ๋ก ์ง์ ์ ๊ตํํ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด์ stack์ ํ์ฉํ์๋ค.
์ฝ๋
def backTracking(m):
global answer
if m==n: # n๋ฒ ๊ตํํ ๊ฒฝ์ฐ ๋๋ฌํ base case
result=goal-int(''.join(l)) # goal๊ฐ๊ณผ ์ซ์๋ฅผ ๊ตํํ ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ตฌํจ
if result < answer: # ์ต์๊ฐ์ ๊ฐฑ์
answer=result
return
for i in range(0,len(l)-1):
for j in range(i+1,len(l)):
a,b=chk[-1] # ๋ฐ๋ก ์ง์ ์ ๊ตํํ ์นด๋ a,b
if (i>=a and j>=b) or i>a: # ์ง์ ๊ฒฝ์ฐ๋ฅผ ํ์ฉํ์ฌ ์ค๋ณต ์ ๊ฑฐ
l[i],l[j]=l[j],l[i] # ๊ตํ
chk.append([i,j]) # stack์ ๊ตํํ ์นด๋ push
backTracking(m+1) # recursion์ผ๋ก ๋ฐฑํธ๋ ํนํ์ฌ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ค
l[i],l[j]=l[j],l[i] # ํ์์ด ๋๋๋ฉด ๊ตํํ๋ ์นด๋๋ฅผ ์์๋ณต๊ตฌ
chk.pop() # stack ์์๋ณต๊ตฌ
if answer==0: # ๋ง์ฝ answer์ด 0์ด๋ผ๋ฉด ์ ๋ต์ ์ฐพ์ ๊ฒฝ์ฐ์ด๋ฏ๋ก ๋์ด์ backtracking์ ํ ํ์๊ฐ ์๋ค
return
T=int(input())
for i in range(T):
l,n=map(int,input().split())
l=list(str(l))
goal=int(''.join(sorted(l,reverse=True)))
answer=999999 # 6์๋ฆฌ ์ค ๊ฐ์ฅ ํฐ ๊ฐ 999999(๋ฌธ์ ์์ ์ต๋ ์๋ฆฟ์๋ 6์ผ๋ก ์ฃผ์ด์ง)
chk=[[-1,-1]] # ๋ฐ๋ก ์ง์ ์ ๊ตํํ ์นด๋๋ค์ ๊ธฐ์ตํ๊ธฐ์ํ stack
backTracking(0)
print('#{} {}'.format((i+1),goal-answer))
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[swea 1216-ํ์ด์ฌ]ํ๋ฌธ2 (0) | 2023.06.21 |
---|---|
[swea 2814-ํ์ด์ฌ]์ต์ฅ ๊ฒฝ๋ก (0) | 2023.06.21 |
[๋ฐฑ์ค 14500๋ฒ-ํ์ด์ฌ]ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2023.06.20 |
[๋ฐฑ์ค 1107๋ฒ-ํ์ด์ฌ]๋ฆฌ๋ชจ์ปจ (0) | 2023.06.20 |
[๋ฐฑ์ค 11053๋ฒ-ํ์ด์ฌ]๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2023.06.20 |