[明日の学習キャンプ]#211026💻 TIL 💻
1870 ワード
📚 TIL
📌 今日の質問
✔白準2805樹剪断(二分探索アルゴリズム)
N,M=map(int,input().split(' '))
trees=list(map(int,input().split(' ')))
left=1
max_height=0
right=max(trees)-1
while left<=right:
#설정한 절단기 높이
mid=(left+right)//2
#상근이가 가져가는 나무의 길이
total=0
for tree in trees:
result=tree-mid
if result>0:
total+=result
if total>M:
max_height=max(max_height,mid)
left=mid+1
elif total==M:
max_height = max(max_height, mid)
break
else:
right=mid-1
print(max_height)
pythonはタイムアウトし、pypy 3で解読しました.
最初はMより大きい場合、答えが見つかるとは思わなかったが、Mと同じ場合に限って、止まって答えを求める.
しかし同じではない場合もあり得るが,この場合Mが生み出す最大高さを求める必要がある.
だから状況を3つに分けて問題を解く.
10004 Q 1021回転キュー(スタック、キューアルゴリズム)
# 데크
import sys
from collections import deque
input = sys.stdin.readline # 빠른 입력
N, M = map(int, input().split())
loc = list(map(int, input().split()))
deque = deque([i for i in range(1, N+1)])
find = 0
count = 0
while (True):
if deque[0] == loc[find]:
deque.popleft()
find += 1
if find == M:
break
else:
if deque.index(loc[find]) < abs(deque.index(loc[find]) - len(deque)):
deque.append(deque.popleft())
else:
# 3번의 경우
deque.appendleft(deque.pop())
count += 1
print(count)
今回はdequeにindexメソッドがないと思っていたので、質問に答えられませんでした.
でも私が以前解いていたコードを見ると、インデックスの仕方がとても良かったです^^
一時間も悩んだような….ほほほ
N,M=map(int,input().split(' '))
trees=list(map(int,input().split(' ')))
left=1
max_height=0
right=max(trees)-1
while left<=right:
#설정한 절단기 높이
mid=(left+right)//2
#상근이가 가져가는 나무의 길이
total=0
for tree in trees:
result=tree-mid
if result>0:
total+=result
if total>M:
max_height=max(max_height,mid)
left=mid+1
elif total==M:
max_height = max(max_height, mid)
break
else:
right=mid-1
print(max_height)
# 데크
import sys
from collections import deque
input = sys.stdin.readline # 빠른 입력
N, M = map(int, input().split())
loc = list(map(int, input().split()))
deque = deque([i for i in range(1, N+1)])
find = 0
count = 0
while (True):
if deque[0] == loc[find]:
deque.popleft()
find += 1
if find == M:
break
else:
if deque.index(loc[find]) < abs(deque.index(loc[find]) - len(deque)):
deque.append(deque.popleft())
else:
# 3번의 경우
deque.appendleft(deque.pop())
count += 1
print(count)
この時ほど上達した実力はないようです.
今日私は再び解くことが大切だと気づいた.
Reference
この問題について([明日の学習キャンプ]#211026💻 TIL 💻), 我々は、より多くの情報をここで見つけました https://velog.io/@dltndudvlzm/내일배움캠프-211026-TIL-uae46wanテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol