๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํ„ฐ๋”” 6์ฃผ์ฐจ] ๋™์ ๊ณ„ํš๋ฒ• N์œผ๋กœ ํ‘œํ˜„ Lv.3 - ํŒŒ์ด์ฌ(Python)/ DP

๐Ÿ“‘ ๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/42895

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - N์œผ๋กœ ํ‘œํ˜„

 

programmers.co.kr

๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

์•„๋ž˜์™€ ๊ฐ™์ด 5์™€ ์‚ฌ์น™์—ฐ์‚ฐ๋งŒ์œผ๋กœ 12๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5

5๋ฅผ ์‚ฌ์šฉํ•œ ํšŸ์ˆ˜๋Š” ๊ฐ๊ฐ 6,5,4 ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฒฝ์šฐ๋Š” 4์ž…๋‹ˆ๋‹ค.
์ด์ฒ˜๋Ÿผ ์ˆซ์ž N๊ณผ number๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, N๊ณผ ์‚ฌ์น™์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•ด์„œ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘ N ์‚ฌ์šฉํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • N์€ 1 ์ด์ƒ 9 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • number๋Š” 1 ์ด์ƒ 32,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ˆ˜์‹์—๋Š” ๊ด„ํ˜ธ์™€ ์‚ฌ์น™์—ฐ์‚ฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์—์„œ ๋‚˜๋จธ์ง€๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์†Ÿ๊ฐ’์ด 8๋ณด๋‹ค ํฌ๋ฉด -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 DP ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 

 number๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด N์„ ์ตœ์†Œ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ ค๋ฉด, N์„ 1๋ฒˆ ์ผ์„ ๋•Œ๋ถ€ํ„ฐ 2๋ฒˆ, 3๋ฒˆ...๋Š˜๋ ค๊ฐ€๋ฉฐ ๋ชจ๋“  ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ–ˆ์„ ๋•Œ number๊ฐ€ ๋‚˜์˜ค๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ  ๋ฉˆ์ถฐ์•ผ ํ•œ๋‹ค.

 

โœ”๏ธ dp[ i ] : N์„ i๋ฒˆ ์ผ์„ ๋•Œ ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆซ์ž ์กฐํ•ฉ

 

โ—ป๏ธ N์„ 1๋ฒˆ~9๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์ ธ๋ณธ๋‹ค.

โ—ป๏ธ K๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š”, 1~(K-1)๋ฒˆ ์ผ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์ˆซ์ž์— (K-1)~1๋ฒˆ ์ผ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์ˆซ์ž๋ฅผ ์ด์–ด๋ถ™์ด๋Š” ๊ฒƒ์ด๋‹ค.

     ex) N์„ 4๋ฒˆ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. dp[1]๐Ÿ”dp[3] / dp[2]๐Ÿ”dp[2]/ dp[3]๐Ÿ”dp[1]

โ—ป๏ธ ๋”ฐ๋ผ์„œ K๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด dp[1]๐Ÿ”dp[K-1], dp[2]๐Ÿ”dp[K-2] ...๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์—ฐ์‚ฐํ•œ ํ›„ ์ค‘๋ณต๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์ง‘ํ•ฉ์— ๊ฒฐ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

โ—ป๏ธ ๋ชจ๋“  ์กฐํ•ฉ์„ ๋‹ค ๋งˆ์นœ ํ›„ number๊ฐ€ ๊ฒฐ๊ณผ์ง‘ํ•ฉ ์•ˆ์— ๋“ค์–ด์žˆ๋‹ค๋ฉด, ๋ฐ”๋กœ K๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 DP๋Š” ํ•ด๋„ํ•ด๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค....๊ทธ๋ž˜๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๊ฐ์„ ์žก๋Š”๋ฐ ๋„์›€์ด ํฌ๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ํŒŒ์ด์ฌ(Python)

def solution(N, number):
    answer = -1
    dp = [0]

    # N์„ 1๋ฒˆ ์‚ฌ์šฉ-> N
    # N์„ 2๋ฒˆ ์‚ฌ์šฉ-> NN, N-N, N+N, N*N, N/N
    for i in range(1, 9): #N์„ i๋ฒˆ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“œ๋Š” ์ˆซ์ž์กฐํ•ฉ ์ฐพ๊ธฐ 
        num_set = set()
        num_set.add(int(str(N)*i))

        for j in range(1, i): #์˜ˆ๋ฅผ ๋“ค์–ด i๊ฐ€ 6์ด๊ณ  j๊ฐ€ 2๋ผ ํ•  ๋•Œ
            for x in dp[j]: # dp[2]
                for y in dp[-j]:  # dp[-2] = dp[4]
                    num_set.add(x + y)
                    num_set.add(x - y)
                    num_set.add(x * y)

                    if y != 0:
                        num_set.add(x // y)

        if number in num_set:
            return i
        dp.append(num_set)
    return answer


#์˜ˆ์ œ ์ถœ๋ ฅ
#print(solution(5, 12))
#print(solution(2, 11))

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ