프로그래머스

프로그래머스 N으로 표현 파이썬

hotchya 2021. 9. 12. 00:51

N으로 표현

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

문제 단순화

  • number, N 정수가 있다.
  • N에 사칙연산을 사용하여 number를 만들 때, N의 사용횟수의 최소값을 리턴한다.
  • 최솟값이 8보다 크면 -1을 리턴한다.

문제풀이

  • 사용횟수를 기준으로 dp 리스트를 만든다.
  • 이전 dp 요소들을 이용해서 사칙연산을 수행한다.
  • 사용횟수 8번까지 반복하면서, number를 찾으면 해당 사용횟수를 리턴한다.
  • 찾지 못하면 -1를 리턴한다.

  • 중복 값을 제거한다.
  • 반복문에 유의한다.
def solution(N, number):
    answer = -1
    dp = [[] for _ in range(9)]
    for i in range(1,9):
        dp[i].append(int(str(N)*i))
        for j in range(1,i):
            for front in dp[j]:
                for back in dp[i-j]:
                    dp[i].append(front+back)
                    dp[i].append(front-back)
                    dp[i].append(front*back)
                    if back:
                        dp[i].append(front//back)
        dp[i] = list(set(dp[i]))
        if number in dp[i]:
            answer = i
            break
    return answer