[백준 12852] 1로 만들기 2
1. 문제 설명
2. 문제 분석
n을 주어진 방법을 사용해서 1로 만드는 문제다. BFS를 통해 노드 1~n개를 만들고, 탐색 방법을 역으로 이용해 가장 먼저 탐색하는 순간까지 카운트한다. 탐색하면서 백트래킹할 수 있도록 현재 노드와 다음 노드 값을 저장한다.
3. 나의 풀이
from collections import deque
n = int(input())
nodes = [0 for _ in range(n+1)]
# 노드 1 -> 노드 n까지 구해간다
queue = deque()
queue.append([1, 0])
nodes[1] = 1
while queue:
cur_node, cnt = queue.popleft()
if cur_node == n: break
# cur_node에 각각 *3, *2, +1로 next_node를 탐색한다.
# 값이 커지는 순서대로 방문하므로 중복 방문 X
if 3*cur_node <= n and nodes[3*cur_node] == 0:
queue.append([3*cur_node, cnt+1])
nodes[3*cur_node] = cur_node
if 2*cur_node <= n and nodes[2*cur_node] == 0:
queue.append([2*cur_node, cnt+1])
nodes[2*cur_node] = cur_node
if 1+cur_node <= n and nodes[1+cur_node] == 0:
queue.append([cur_node+1, cnt+1])
nodes[1+cur_node] = cur_node
# nodes[next_node] = cur_node를 통해 백트래킹
print(cnt)
# 현재 cur_node는 n, cur_node = nodes[cur_node]를 통해 cur_node가 1이 되기 직전까지 백트래킹한다.
while cur_node != 1:
print(cur_node, end=' ')
cur_node = nodes[cur_node]
print(1)
Author And Source
이 문제에 관하여([백준 12852] 1로 만들기 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@j_aion/백준-12852-1로-만들기-2
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
n을 주어진 방법을 사용해서 1로 만드는 문제다. BFS를 통해 노드 1~n개를 만들고, 탐색 방법을 역으로 이용해 가장 먼저 탐색하는 순간까지 카운트한다. 탐색하면서 백트래킹할 수 있도록 현재 노드와 다음 노드 값을 저장한다.
3. 나의 풀이
from collections import deque
n = int(input())
nodes = [0 for _ in range(n+1)]
# 노드 1 -> 노드 n까지 구해간다
queue = deque()
queue.append([1, 0])
nodes[1] = 1
while queue:
cur_node, cnt = queue.popleft()
if cur_node == n: break
# cur_node에 각각 *3, *2, +1로 next_node를 탐색한다.
# 값이 커지는 순서대로 방문하므로 중복 방문 X
if 3*cur_node <= n and nodes[3*cur_node] == 0:
queue.append([3*cur_node, cnt+1])
nodes[3*cur_node] = cur_node
if 2*cur_node <= n and nodes[2*cur_node] == 0:
queue.append([2*cur_node, cnt+1])
nodes[2*cur_node] = cur_node
if 1+cur_node <= n and nodes[1+cur_node] == 0:
queue.append([cur_node+1, cnt+1])
nodes[1+cur_node] = cur_node
# nodes[next_node] = cur_node를 통해 백트래킹
print(cnt)
# 현재 cur_node는 n, cur_node = nodes[cur_node]를 통해 cur_node가 1이 되기 직전까지 백트래킹한다.
while cur_node != 1:
print(cur_node, end=' ')
cur_node = nodes[cur_node]
print(1)
Author And Source
이 문제에 관하여([백준 12852] 1로 만들기 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@j_aion/백준-12852-1로-만들기-2
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from collections import deque
n = int(input())
nodes = [0 for _ in range(n+1)]
# 노드 1 -> 노드 n까지 구해간다
queue = deque()
queue.append([1, 0])
nodes[1] = 1
while queue:
cur_node, cnt = queue.popleft()
if cur_node == n: break
# cur_node에 각각 *3, *2, +1로 next_node를 탐색한다.
# 값이 커지는 순서대로 방문하므로 중복 방문 X
if 3*cur_node <= n and nodes[3*cur_node] == 0:
queue.append([3*cur_node, cnt+1])
nodes[3*cur_node] = cur_node
if 2*cur_node <= n and nodes[2*cur_node] == 0:
queue.append([2*cur_node, cnt+1])
nodes[2*cur_node] = cur_node
if 1+cur_node <= n and nodes[1+cur_node] == 0:
queue.append([cur_node+1, cnt+1])
nodes[1+cur_node] = cur_node
# nodes[next_node] = cur_node를 통해 백트래킹
print(cnt)
# 현재 cur_node는 n, cur_node = nodes[cur_node]를 통해 cur_node가 1이 되기 직전까지 백트래킹한다.
while cur_node != 1:
print(cur_node, end=' ')
cur_node = nodes[cur_node]
print(1)
Author And Source
이 문제에 관하여([백준 12852] 1로 만들기 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@j_aion/백준-12852-1로-만들기-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)