728x90
SMALL
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def solution(N, number):
answer = 0
dp = [set() for _ in range(9)]
if N == number:
return (answer := 1)
for i in range(1, 9):
dp[i].add(int(str(N) * i))
for j in range(1, i):
for num1 in dp[j]:
for num2 in dp[i-j]:
dp[i].add(num1 + num2)
dp[i].add(num1 - num2)
dp[i].add(num1 * num2)
if num2 != 0:
dp[i].add(num1 // num2)
if number in dp[i]:
return (answer := i)
return (answer := -1)
왜 이렇게 풀었을까?
- dp 크기를 9로 제한하고, 반복문을 1부터 8까지만 돌린 이유는 문제에서 N이 1 이상 9 이하로만 사용되며, 최솟값이 8보다 크면 예외 처리를 해줄 것을 명시해뒀기 때문입니다.
- dp를 set으로 설정한 것은 중복 계산을 피하기 위해서입니다. 리스트로 설정했을 때보다 시간 효율성을 높일 수 있었습니다.
- 먼저 N이 한 자리 수이기 때문에 N으로 만들 수 있는 여러 자리의 수들은 미리 dp 배열에 집어넣었습니다.
- 이후 dp 배열을 순회하며 뽑아낸 수들로 사칙연산한 결과값들까지도 dp 배열에 추가해주었습니다.
- 그리하여 최종적으로 dp 배열의 요소 중 해당 값이 들어있다면 그 요소의 인덱스를 return하는 방식으로 구현해보았습니다 !
728x90
LIST
'알고리즘 문제 > 알고리즘 고득점 Kit' 카테고리의 다른 글
📙 가장 먼 노드 (1) | 2024.11.24 |
---|---|
📘📗 스택/큐 (같은 숫자는 싫어 ~ 주식가격) (1) | 2024.01.22 |
📘📗📙 해시 (완주하지 못한 선수 ~ 베스트앨범) (1) | 2023.12.19 |