반응형

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

 

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

 

programmers.co.kr

 

해결 방법 : DP

  • n개의 숫자N으로 만들 수 있는 수들을 dp[n] 이라고 한다면, a + b = n을 만족하는 모든 자연수 a, b에 대해
    • dp[n] = dp[a]와 dp[b] 사이의 모든 연산 결과 
def solution(N, number):
    dp = [[] for _ in range(8)]

    for i in range(8): # N이 1개 ~ 8개
        numbers = set([int(str(N) * (i + 1))]) # N의 개수가 한 숫자에 다 쓰인 경우

        for j in range(0, ((i + 1) // 2)): # 합이 i인 두 경우들에 대해 반복
            for x in dp[j]: 
                for y in dp[i - 1 - j]: # 생성 가능한 수들 추가
                    numbers.update([x + y, x - y, y - x, x * y])
                    if x != 0: numbers.add(y // x)
                    if y != 0: numbers.add(x // y)

        if number in numbers:
            return i + 1

        dp[i].extend(numbers)

    return -1
반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

백준 2696 : 중앙값 구하기  (0) 2021.07.18
프로그래머스 - 중력 작용  (0) 2021.07.17
프로그래머스 : 순위  (0) 2021.06.29
프로그래머스 : 단어 변환  (0) 2021.06.28
프로그래머스 : 더 맵게  (0) 2021.06.28

+ Recent posts