본문 바로가기
PROGRAMMERS

[프로그래머스] N으로 표현 (LEVEL 3)

by 나른한 사람 2021. 4. 18.

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

 

코딩테스트 연습 - N으로 표현

 

programmers.co.kr

[프로그래머스] N으로 표현 (LEVEL 3)

 

동적 프로그래밍 문제.

쉽게 생각했는데 생각보다 고민한 문제.

 

처음에는 dp[n] = dp[n-1] + ['+N', '-N', '/N', '*N'] 계산을 한 결과만 구해나가면 될줄 알았지만,

dp[n] = dp[i] + dp[n-i]; i : 1~n-1 라고 생각하고 풀어야한다.

 

조건이 많아서(max deep이 8) DFS로 풀어도 시간초과가 나지 않고 풀리긴 한다.

 

<파이썬 코드>

def solution(N, number):
    adds= lambda x,y: map(int,[x+y,x-y,x/y,x*y])
    dp = [0]
    for i in range(1,9):
        tmp = set({int(str(N)*(i))})
        for j in range(1,i):
            for x in dp[j]:
                for y in dp[i-j]:
                    if y!=0:
                        tmp.update(adds(x,y))
        dp.append(tmp)
        if number in dp[i]: return i
    return -1

 

댓글