import Foundation
func solution(_ word:String) -> Int {
var dictionary : [String] = []
let alphabet = ["A", "E", "I", "O", "U"]
func generateWords() {
for length in 1...5 {
generateWordsHelper("", length)
}
}
func generateWordsHelper(_ currentWord: String, _ length: Int) {
if length == 0 {
dictionary.append(currentWord)
return
}
for letter in alphabet {
let newWord = currentWord + letter
generateWordsHelper(newWord, length - 1)
}
}
generateWords()
dictionary = dictionary.sorted(by: <)
let ans = dictionary.firstIndex(of: word)! + 1
//test
return ans
}
예시를 한번 들어보자.
// given Array
var numbers = [2,3,3,5]
//reset result Array
var result: [Int] = Array(repeating: -1, count: numbers.count)
//numbers 0번째 인덱스부터 순회시작.
// # 1
result 현재 상태 [-1,-1,-1,-1]
// i = 0 , number[i] = 2
stack 현재 상태 []
// stack이 비어 있으니깐 바로 stack에 현재 인덱스 넣기
stack 현재 상태 [0]
// # 2
result 현재 상태 [-1,-1,-1,-1]
// i = 1 , number[i] = 3
stack 현재 상태 [0]
// stack이 비어 있지 않고, numbers[stack.last] < numbers [i]
result 현재 상태 [3,-1,-1,-1]
stack 현재 상태 [1]
// # 3
result 현재 상태 [3,-1,-1,-1]
// i = 2 , number[i] = 3
stack 현재 상태 [1]
// stack이 비어 있지 않지만, numbers[stack.last] == numbers [i]
result 현재 상태 [3,-1,-1,-1]
stack 현재 상태 [1,2]
// # 4
result 현재 상태 [3,-1,-1,-1]
// i = 3 , number[i] = 5
stack 현재 상태 [1]
// stack이 비어 있지 않고, numbers[stack.last] < numbers [i]
result 현재 상태 [3,5,-1,-1]
stack 현재 상태 [1]
// stack이 비어 있지 않고, numbers[stack.last] < numbers [i]
result 현재 상태 [3,5,5,-1]
stack 현재 상태 [0]
끝!
import Foundation
func solution(_ numbers:[Int]) -> [Int] {
var stack: [Int] = []
var result: [Int] = Array(repeating: -1, count: numbers.count)
for i in 0..<numbers.count {
while !stack.isEmpty && numbers[i] > numbers[stack.last!] {
let idx = stack.removeLast()
result[idx] = numbers[i]
}
stack.append(i)
}
return result
}