반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/154538
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🐍파이썬
더보기
DFS
def solution(x, y, n):
def dfs(v, cur):
global answer
if cur == y:
answer = v
return
if cur > y:
return
dfs(v+1, cur+n)
dfs(v+1, cur*2)
dfs(v+1, cur*3)
global answer
answer = 0
dfs(0, x)
return answer - 1
재귀호출 초과 런타임 에러, 실패 뜬 코드
DP
def solution(x, y, n):
answer = 0
ans = set()
ans.add(x)
while ans: #더 이상 연산할 숫자가 없을 때까지 반복
if y in ans: #ans에 타겟넘버가 있는 경우
return answer #연산횟수 리턴
temp = set()
for i in ans: #ans의 각 원소에 대해 3가지 연산 진행
if i+n <= y: #y보다 커지면 y가 될 가능성이 없으므로 연산할 목록에서 제외
temp.add(i+n)
if i*2 <= y:
temp.add(i*2)
if i*3 <= y:
temp.add(i*3)
ans = temp #ans를 temp값으로 갱신
answer += 1 #연산횟수+1
return -1
다른 풀이 방법
BFS
from collections import deque
def solution(x, y, n):
visited = [0] * 1000001
q = deque()
q.append((x, 0))
visited[x] = 1
while q:
num, cnt = q.popleft()
if num == y:
return cnt
for next_num in (num + n, num * 2, num * 3):
if next_num <= y and not visited[next_num]:
visited[next_num] = 1
q.append((next_num, cnt + 1))
return -1
반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스|파이썬] 큰 수 만들기 (탐욕법(Greedy)/lv.2) (0) | 2023.06.01 |
---|---|
[프로그래머스|파이썬] 소수 찾기 (완전탐색/lv.2) (0) | 2023.05.29 |
[프로그래머스|파이썬] 2 x n 타일링 (연습문제/lv.2) (0) | 2023.05.26 |
[프로그래머스|파이썬] 2개 이하로 다른 비트(월간 코드 챌린지 시즌2/lv.2) (0) | 2023.05.25 |
[프로그래머스|파이썬] [1차] 프렌즈4블록 (2018 KAKAO BLIND RECRUITMENT/lv.2) (0) | 2023.05.24 |
[프로그래머스|파이썬] 모음사전 (완전탐색/lv.2) (0) | 2023.05.24 |