[BOJ] 17298
7408 ワード
問題...
fail log
me
38時間を超える45時間から時間を超える程度にします.
solution
stackは、要素値以外の要素にインデックスを追加するために使用されます.
例えば、数列が3 5 2 7の場合
初期スタックには0が含まれ、A[1]とA[Stack[1]の要素を比較します.
stack[1]は0なので、A[1]とA[0]を比較します.A[1]の値が大きいからです.
答え[0]の値はA[1]の5です.すなわち0の5大数を求めた.
また,0インデックスは大きな数を求めたのでpopし,次に求めるインデックス1を入れる.
現在iが最大数を求めていない場合でも、stackに現在のインデックスiを追加する必要があります.
このようにしてこそi+1の五大数を求めることができるので、i+1の五大数を求めると、自動的にiの五大数を求めることになる
リファレンス
fail log
me
N=int(input())
A=deque(map(int,input().split()))
recents=deque([A.pop()])
res=deque([-1])
while A:
rear=A.pop()
found=False
for recent in recents:
if rear < recent:
res.appendleft(recent)
found=True
break
if not found : res.appendleft(-1)
if len(A)!=0 and A[-1]< rear:
recents.appendleft(rear)
print(*res)
今ではスタックを利用しているようには見えません.38時間を超える45時間から時間を超える程度にします.
solution
import sys
n = int(input())
A = list(map(int, sys.stdin.readline().split()))
answer = [-1] * n
stack = []
stack.append(0) # 첫 번째 index
for i in range(1, n): # 비교
while stack and A[stack[-1]] < A[i]: # while 대신 if는 안되나?
answer[stack.pop()] = A[i] # 해당 자리에 오큰수 넣기
stack.append(i)
print(*answer)
そこでスタックを利用して問題を解く.stackは、要素値以外の要素にインデックスを追加するために使用されます.
例えば、数列が3 5 2 7の場合
初期スタックには0が含まれ、A[1]とA[Stack[1]の要素を比較します.
stack[1]は0なので、A[1]とA[0]を比較します.A[1]の値が大きいからです.
答え[0]の値はA[1]の5です.すなわち0の5大数を求めた.
また,0インデックスは大きな数を求めたのでpopし,次に求めるインデックス1を入れる.
現在iが最大数を求めていない場合でも、stackに現在のインデックスiを追加する必要があります.
このようにしてこそi+1の五大数を求めることができるので、i+1の五大数を求めると、自動的にiの五大数を求めることになる
リファレンス
Reference
この問題について([BOJ] 17298), 我々は、より多くの情報をここで見つけました https://velog.io/@kinnyeri/BOJ-17298テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol