白駿-2493塔
1882 ワード
質問する😁
左側にレーザーを発射するタワーが自分より大きいタワーでしかレーザーを発射できません.入力タワーの長さで受信タワーの番号を出力
問題そのものは難しくない.
に道を教える🤣
(フルナビゲーション)
でも今は不完全だ
import sys
n = int(sys.stdin.readline().rstrip())
arr = list(map(int, sys.stdin.readline().rstrip().split()))
result = []
stackArr = []
for i in range(len(arr)):
if i == 0:
stackArr.append([i, arr[i]])
else:
for j in range(len(stackArr)-1, -1, -1):
if arr[i] > stackArr[j][1]:
stackArr.pop()
stackArr.append([i, arr[i]])
if len(stackArr) == 1:
result.append(0)
else:
result.append(stackArr[-2][0] + 1)
for i in range(len(result)):
print(result[i], end=' ')
スタックを利用してできるだけ時間を減らそうとします.うまくやったと思っていたのですが、69~65の間でタイムアウトできなかったので悩んでしまいました.
△大間違い…次も間違い、タイムアウトの天地です.
この方法はスタックを使ってよくできていますが、スタックの要素が多くなるとスタックがループし続けるので、あまりよくありません.
試験に落ちる
import sys
n = int(input())
arr = list(map(int, input().split()))
result = []
stackArr = []
for i in range(len(arr)):
while stackArr:
if arr[i] < stackArr[-1][1]:
result.append(stackArr[-1][0] + 1)
break;
stackArr.pop()
if not stackArr:
result.append(0)
stackArr.append([i, arr[i]])
for i in range(len(result)):
print(result[i], end=' ')
スタックの使用は第2の方法と同じであるが、最大の違いはbreak
を使用するかどうかである.2つ目は、スタックの中に最後のスタックよりずっと小さいやつが入ってきたら、例えば100000、999999、99999998......1に進むと、1に入るとスタックに積み上げられ、for loopで繰り返し文ごとにループし、resultに値を入力します.第3の方法はそうではありません.私たちの目的は結果で、結果に値を加えると中断し、不要な重複を減らすことです.(2番目にforを使うときもbreakを使いたいのですが、デザインが違うので難しいです…)
に感銘を与える😀
Reference
この問題について(白駿-2493塔), 我々は、より多くの情報をここで見つけました https://velog.io/@yjs3819/백준-2493-탑テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol