[Swift]白駿17298-呉大洙
2437 ワード
質問リンク
最初は2層for文で問題を解いた.
タイムアウトの回答
import Foundation
let n = Int(readLine()!)!
var array = readLine()!.split(separator: " ").map({Int(String($0))!})
for i in 0..<n-1 {
var result = 0
for j in i+1..<array.count {
if array[j] > array[i] {
result = array[j]
break
}
}
print(result != 0 ? result : -1,terminator: " ")
}
print(-1)
もちろん、タイムアウトしました.数の範囲からすると当然ですが、これでテスト用例を解決したので、夢中になるのをあきらめず、これで何をしたいのかずっと考えていました^^;;
いずれにしても、私はそれを投げました.アルゴリズムの下にスタックがあるので、スタックで解いてみました...!
でも知らなかった.
人の解答を参考にして解答する.
まず2つの配列が必要です.
readLine()を使用して入力した配列と
整数以下の桁数を持つstack
まず、スタックが空でない場合.
現在の値が
したがって、
上記操作が完了すると、
array配列では、大きな整数を持つ要素だけが大きな整数の値を変更します.
stack配列には整数を持たない要素のビット値が含まれています.
したがって、for文を使用してarrayのstack位置の要素値を-1に変更できます.
最終コード
import Foundation
let n = Int(readLine()!)!
var array = readLine()!.split(separator: " ").map({Int(String($0))!})
var stack = [Int]()
for i in 0..<n {
while !stack.isEmpty && array[stack.last!] < array[i] {
array[stack.removeLast()] = array[i]
}
stack.append(i)
}
for i in stack {
array[i] = -1
}
print(array.map{String($0)}.joined(separator: " "))
難しいけど、面白い!!Reference
この問題について([Swift]白駿17298-呉大洙), 我々は、より多くの情報をここで見つけました https://velog.io/@sun02/Swift-백준-17298-오큰수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol