앞전에 오큰수를 풀었어서 조금은 쉽게 해결이 가능했다!
이번엔 배열을 세 개 사용하였다.
먼저 for 문을 사용해서
count[numArray[i]-1] +=1 으로 각 원소의 개수를 알아내었다.
이때 만약 numArray[i] 값이 1 이면, count[0]에 저장되어야하기 때문에 -1을 해주어야한다.
이후 오큰수와 같이 값을 비교해주는데
이번엔 count배열 값으로 비교해준다.
count[numArray[stack.last!]-1] < count[numArray[i]-1] 를 비교하여
만약 현재 원소의 개수가 더 많다면, 오등큰수이기 때문에
numArray[stack.removeLast()] = numArray[i] 를 해주면 된다.
import Foundation
let n = Int(readLine()!)!
var numArray = readLine()!.split(separator:" ").map{Int(String($0))!}
var count = Array(repeating: 0, count: 1000000)
var stack = [Int]()
for i in 0..<n {
count[numArray[i]-1] += 1
}
for i in 0..<n {
while !stack.isEmpty && count[numArray[stack.last!]-1] < count[numArray[i]-1] {
numArray[stack.removeLast()] = numArray[i]
}
stack.append(i)
}
for i in stack {
numArray[i] = -1
}
print(numArray.map{String($0)}.joined(separator: " "))