본문 바로가기
Programming/Programmers

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

by 데이터현 2021. 8. 12.

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

 

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

 

programmers.co.kr

'''
DP N 으로 표현.
N 과 number 가 주어질 때  N을 최소로 사용하여  number를 표현.
ex) 5로 12표현
state(1) = (int(str(N)*1))
state(2) = 5+5 , 5-5 , 5*5 , 5/5 , (int(str(N)*2))
state(3) = state(2)+5 , state(2)-5 , state(2)/5  ,(int(str(N)*3))
state(4) = state(2) + state(2) , ...
'''
def solution(N, number):
    if N == number:
        return 1
    num_set = [set() for i in range(8)]  # 최소값은 8까지
    for count, state in enumerate(num_set, start=1):
        state.add(int(str(N) * count))
    for i in range(1,8): # 1부터 7까지
        for j in range(i): # 0부터 i 앞까지
            for oper1 in num_set[j]: # j번째 연산결과
                for oper2 in num_set[i-j-1]: # i번째에 추가시킬꺼니 -1
                    num_set[i].add(oper1 + oper2)
                    num_set[i].add(oper1 - oper2)
                    num_set[i].add(oper2 - oper1)
                    num_set[i].add(oper1 * oper2)
                    if oper1 != 0:
                        num_set[i].add(oper2 // oper1)
                    elif oper2 !=0:
                        num_set[i].add(oper1//oper2)
        if number in num_set[i]:
            return i+1
    else:
        return -1

댓글