๐Ÿ“‚์ฝ”๋”ฉํ…Œ์ŠคํŠธ:CodingTest

[swea 1244-ํŒŒ์ด์ฌ][S/W ๋ฌธ์ œํ•ด๊ฒฐ ์‘์šฉ] 2์ผ์ฐจ - ์ตœ๋Œ€ ์ƒ๊ธˆ

mc.thd 2023. 6. 21. 12:36

swea 1244 [S/W ๋ฌธ์ œํ•ด๊ฒฐ ์‘์šฉ] 2์ผ์ฐจ - ์ตœ๋Œ€ ์ƒ๊ธˆ

์‚ฌ์šฉ์–ธ์–ด : PYTHON

ํ’€์ด

๊ตฌํ˜„์„ ์œ„ํ•œ ์ƒ๊ฐ


๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ค‘๋ณต์—†์ด ํƒ์ƒ‰ํ•œ๋‹ค.

๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ goal(์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๊ฐ’)๊ณผ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์ •๋‹ต์ด๋‹ค.

๐Ÿ’ก goal : ์ด๋™ํšŸ์ˆ˜ ์ œํ•œ์ด ์—†๋‹ค๊ณ  ํ•  ๋•Œ, ์ˆซ์ž๋ฅผ swapํ•ด์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€๊ฐ’์€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๊ฐ’์ด๋‹ค.

๋ฐฑํŠธ๋ž˜ํ‚น


image

์ˆซ์ž์นด๋“œ 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))