[アルゴリズム解答][Python]白駿17298号:大数
白駿17298題リンク:https://www.acmicpc.net/problem/17298
📑 問題の説明
数列のサイズと数列が与えられたときに、各数列の各位置に整数を求めるプログラムを作成します.
五大数とは、各位置の数字のうち、右にある数字のうち、各位置の数字より大きく、最も左にある数字を指す.
例えば、数列が3 5 2 7の場合
3の5大数は5 2 7の中で3より大きく,最も左側に位置する5となる.
5の5大数は7、2の5大数は7、7は5大数にならないので-1を出力します.
入力:数列のサイズ、数列
出力:大数
💡 トラブルシューティング方法
この問題は結局解けず、答えを見て解決した.
(今まで私のコードの中でどの部分が間違っているのかまだ見つかっていません...)
Tip! stackを使用してindexを保存!
初期スタック[0]
初期数列インデックス=1
1.index=1の場合、
数列[stack[1]=9(前の数字)>数列[index]=5(現在の数字)のためindex=1をstackにプッシュ
--> stack[1 0]
index=2の場合、
数列[stack[1]=5(前の数字)>数列[index]=4(現在の数字)のためindex=2をstackにプッシュ
--> stack[2 1 0]
index=3の場合、
数列[Stack[1]=4(前の数字)<数列[index]=8(現在の数字);stack.pop(=2)は、現在の数値が前の数値より大きい場合にプロセスを繰り返し、繰り返し完了後に現在のインデックスをスタックにプッシュします.
-->スタック[10]-->数列[958]
-->スタック[0]-->数列[9888]
--> stack[3 0]
stackにindex値が残っている場合は、大きな数はできないことを示すため、その数列の桁数は-1に変更されます.
-->数列[1.8-1]
💻 コード#コード#
グマンスコード
import sys
def check_neg(n,num_list, order):
index_stack = list()
index_stack.append(0)
result = list()
for i in range(1, n):
if(num_list[i] < num_list[index_stack[-1]]):
index_stack.append(i)
else:
num_list[index_stack.pop()] = num_list[i]
if(len(index_stack)>0):
while(len(index_stack)):
if (num_list[index_stack[-1]]<num_list[i]):
num_list[index_stack.pop()] = num_list[i]
else:
break
index_stack.append(i)
if(len(index_stack) > 0):
for i in range(len(index_stack)):
num_list[index_stack.pop()] = -1
print(num_list)
if __name__ == '__main__':
n = int(sys.stdin.readline())
num_list = [ int(x) for x in (sys.stdin.readline().split())]
order = sorted(num_list)
check_neg(n, num_list, order)
正しいコードimport sys
def check_neg(n,num_list):
index_stack = list()
index_stack.append(0)
for i in range(1, n):
while index_stack and num_list[index_stack[-1]] < num_list[i]:
num_list[index_stack.pop()] = num_list[i]
index_stack.append(i)
if(len(index_stack) > 0):
for i in range(len(index_stack)):
num_list[index_stack.pop()] = -1
return(num_list)
if __name__ == '__main__':
n = int(sys.stdin.readline())
num_list = [ int(x) for x in (sys.stdin.readline().split())]
result = check_neg(n, num_list)
for i in result:
print(i, end=" ")
💟 詳細
Reference
この問題について([アルゴリズム解答][Python]白駿17298号:大数), 我々は、より多くの情報をここで見つけました https://velog.io/@yeomja99/알고리즘-문제-풀이파이썬-백준-17298번-오큰수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol