일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 다이나믹 프로그래밍
- 정렬
- web
- DFS
- 스택
- DP
- 자바스크립트
- 너비 우선 탐색
- JavaScript
- 프로그래머스
- BFS
- 문자열
- 그래프 이론
- 자료구조
- 프로그래머스스쿨
- level2
- 그래프 탐색
- BASIC
- 그리디 알고리즘
- lv2
- 딕셔너리
- 알고리즘
- 파이썬
- 웹 프론트엔드
- CSS
- programmers
- 그래프이론
- 구현
- 브루트포스 알고리즘
- 백준
Archives
- Today
- Total
DevLog:-)
[알고리즘][파이썬]1463-1로 만들기 (BFS/DP) 본문
반응형
문제
1.BFS코드
import sys
from collections import deque
x = int(sys.stdin.readline().strip())
def fun(start_x):
q= deque()
q.append((0,start_x))
while(q):
C, cur_x =q.popleft()
if(cur_x==1):
return C
elif(cur_x!=0):
if(cur_x % 3 == 0): q.append((C+1,cur_x//3))
if(cur_x % 2 == 0): q.append((C+1,cur_x//2))
q.append((C+1,cur_x-1))
print(fun(x))
#큐에 연산 횟수, 연산 결괏값을 넣어 와일문을 돌려서 1이 나올 때의 연산 횟수 반환했다.
2.DP코드
x=int(input())
d=[0]*(x+1) # 1-based
for i in range(2,x+1): # 2부터 x까지 반복
d[i]=d[i-1]+1 #1빼기
if i%2==0: #2나누기
d[i]=min(d[i],d[i//2]+1)
if i%3==0: #3나누기
d[i]=min(d[i],d[i//3]+1)
#각 연산 중 최소가 d[i]에 저장
print(d[x])
#d[i]는 숫자 i가 1이 되기 우한 최소 연산 횟수이다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[알고리즘][파이썬]1302-베스트 셀러 (0) | 2023.07.10 |
---|---|
[알고리즘][파이썬]2443-별찍기 -6 (0) | 2023.07.08 |
[알고리즘][파이썬]1371-가장 많은 글자 (0) | 2023.07.01 |
[알고리즘][파이썬]14503-로봇청소 (0) | 2023.06.29 |
[알고리즘][파이썬]1969-DNA (1) | 2023.06.15 |