[問題解決]Baek Jun-14226表情(dfs&bfs)
8181 ワード
提问链接
問題の説明
英善は喜んでいたので、孝彬にSの微笑みを送りたい.
英善はすでに画面に表情を入力した.現在、S個の表情を作成するには、以下の3つの演算のみを使用します.
1つのプログラムを編纂して、英仙がスクリーンの上でS個の表情を作成するのに要する時間の最大値を求めます.
入力
第1行はS(2≦S≦1000)を与える.
しゅつりょく
S個の表情を作成するのに要する時間の最大値を1行目に出力します.
入力例1
2
サンプル出力1
2
入力例2
4
サンプル出力2
4
入力例3
18
サンプル出力3
8
私の答え
bfsを用いて解決した.
bfsは、まず隣接ノードにアクセスするナビゲーションである.
つまり
가까운 정점, 가까운 거리에 있는 노드를 먼저 탐색
です.最低料金、最高価格を探している場合は、多く利用してください.
(ただし、重みは1でなければなりません)
check[display][board]を行うのは,探索した場所を再探索する必要がなく,最高値を求める必要があるためcheckingを行う必要があるためである.
問題の条件のように、点火式に分けて解決した.
display=1,board=0,count=0を初期化します.
ナビゲーション順序
コード#コード#
from collections import deque
n = int(input())
max_size = 1001
check = [[-1]*max_size for _ in range(max_size)]
def bfs():
queue = deque()
queue.append((1, 0, 0))
while queue:
display, board, count = queue.popleft()
if display == n:
return count
# 1.화면에서 보드로 저장
if 0 < display < max_size:
if check[display][display] == -1:
check[display][display] = 1
# count += 1
queue.append((display, display, count+1))
# 2. 보드에서 화면으로 저장, display + board 몽땅 화면에 저장되기 때문에 비교 필요
if 0 < board and display + board < max_size :
if check[display+board][board] == -1:
check[display+board][board] = 1
queue.append((display+board, board, count+1))
# 3. display에서 하나 삭제
if check[display-1][board] == -1:
check[display-1][board] =1
queue.append((display-1, board, count+1))
print(bfs())
Reference
この問題について([問題解決]Baek Jun-14226表情(dfs&bfs)), 我々は、より多くの情報をここで見つけました https://velog.io/@redcarrot01/ProblemSolving-백준-14226-이모티콘dfsbfsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol