Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / Python] N์œผ๋กœ ํ‘œํ˜„

meeeeejin 2021. 4. 6. 15:36

๋ฌธ์ œ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/42895

 

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

 

programmers.co.kr

 

 

๋ฌธ์ œ ์„ค๋ช…

์ฒ˜์Œ์—” number์— ๋Œ€ํ•œ dp ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋ คํ–ˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ N์˜ ์‚ฌ์šฉ ํšŸ์ˆ˜์— ๋Œ€ํ•œ dp ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ–ˆ๋‹ค. ๋ฌธ์ œ์—์„œ ์ตœ์†Ÿ๊ฐ’์ด 8๋ณด๋‹ค ํด ๊ฒฝ์šฐ -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๋‚˜์™€์žˆ์œผ๋ฏ€๋กœ N์„ 8๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊นŒ์ง€๋งŒ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค. 

 

N์„ i๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜:

   - NNN...N (N์ด i๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฝ์šฐ)

   - (N์„ 1๋ฒˆ ์‚ฌ์šฉํ•œ ์ˆ˜) ์‚ฌ์น™์—ฐ์‚ฐ (N์„ i - 1๋ฒˆ ์‚ฌ์šฉํ•œ ์ˆ˜)

   - (N์„ 2๋ฒˆ ์‚ฌ์šฉํ•œ ์ˆ˜) ์‚ฌ์น™์—ฐ์‚ฐ (N์„ i - 2๋ฒˆ ์‚ฌ์šฉํ•œ ์ˆ˜)

   ...

   - (N์„ i - 1๋ฒˆ ์‚ฌ์šฉํ•œ ์ˆ˜) ์‚ฌ์น™์—ฐ์‚ฐ (N์„ 1๋ฒˆ ์‚ฌ์šฉํ•œ ์ˆ˜)

 

 

์ด์ฒ˜๋Ÿผ N์„ 1๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ 8๋ฒˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊นŒ์ง€๋ฅผ ๊ฐ ์ง‘ํ•ฉ์— ๋„ฃ๊ณ , ๋งŒ์•ฝ number๊ฐ€ ํ•ด๋‹น ์ง‘ํ•ฉ์˜ ์›์†Œ๋ผ๋ฉด i๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. 

 

 

 

 

์†Œ์Šค์ฝ”๋“œ

from collections import defaultdict

def solution(N, number):
	# dp[i]: N์„ i๋ฒˆ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ
    dp = defaultdict(set)

    for i in range(1, 9):
        dp[i].add(int(str(N) * i))  # NNN...N
        for j in range(1, i):
            for n1 in dp[j]:
                for n2 in dp[i - j]:
                    dp[i].add(n1 + n2)
                    dp[i].add(n1 - n2)
                    dp[i].add(n1 * n2)
                    if n2 != 0: dp[i].add(n1 // n2)  # 0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Œ

        if number in dp[i]: return i # N์„ i๋ฒˆ ์‚ฌ์šฉํ•ด์„œ number๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

    return -1 # ์ตœ์†Ÿ๊ฐ’์ด 8๋ฒˆ๋ณด๋‹ค ํด ๊ฒฝ์šฐ

 

 

 

728x90