programmers.co.kr/learn/courses/30/lessons/42895?language=python3
코딩테스트 연습 - N으로 표현
programmers.co.kr
def solution(N, number):
dp = []
for i in range(1, 9):
numbers = set()
numbers.add(int(i*str(N)))
for j in range(i-1):
for x in dp[j]:
for y in dp[i-j-2]:
numbers.add(x+y)
numbers.add(x*y)
numbers.add(x-y)
if y != 0:
numbers.add(x//y)
if number in numbers:
return i
dp.append(numbers)
return -1
dp[i]는 N을 i + 1개 사용했을 때 만들 수 있는 값들이다.
N은 최대 8번 쓸 수 있으니 range(1, 9)로 for문을 돈다. i는 사용한 N의 개수를 뜻한다.
예를 들어보자. i가 4일 때 네 가지 경우가 가능하다.
- N을 연속으로 쓰는 경우(NNNN)
- N(N을 한 번 썼을 때 나오는 수들, dp[0])과 NNN(N을 세 번 썼을 때 나오는 수들, dp[2])을 사칙연산 하는 경우
- NN(dp[1])과 NN(dp[1])을 사칙연산 하는 경우
- NNN(dp[2])과 N(dp[0])을 사칙연산 하는 경우
만약 numbers 안에 number가 있다면 i를 return한다.
for문을 다 돌고나서도 number를 찾지 못했다면 불가능한 것이므로 -1을 return한다.
이해가 어렵다면 아래 블로그를 참고.
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스-동적계획법] 등굣길_파이썬 ❌🔺 (0) | 2021.03.22 |
---|---|
[프로그래머스-동적계획법] 정수 삼각형_파이썬 ❌⭕ (0) | 2021.03.22 |
[프로그래머스-탐욕법] 단속카메라_파이썬 ❌⭕ (0) | 2021.03.22 |
[프로그래머스-탐욕법] 섬 연결하기_파이썬(최소신장트리, 크루스칼 알고리즘) (0) | 2021.03.21 |
[프로그래머스-탐욕법] 구명보트_파이썬 (0) | 2021.03.21 |