taek0622/Algorithm-Notes

[Question] BOJ 18870번 문제

Opened this issue · 0 comments

백준 18870번 문제는 시간이 매우 빠듯한 문제인듯하다.
계속되는 시간초과로 다른 사람의 코드를 참고했는데, 그 중 2번째 솔루션의 코드를 리딩할 수는 있으나, 생각하고 작성하기는 어려울 것 같다는 생각이 들었다.
두고두고 보면서 익혀야할 것 같다.
특히. enumerated()의 사용 부분을 주의 깊게 봐야할 것 같다.

코드의 전문은 아래와 같다,

let N = Int(readLine()!)!
let points = readLine()!.split(separator: " ").map { Int(String($0))! }.enumerated().sorted { $0.element < $1.element }
var counter = Array(repeating: 0, count: N)
var count = 0
var prevNum = points.first?.element

counter[points.first!.offset] = count

for (offset, element) in points[1...] {
    if prevNum == element {
        counter[offset] = count
    } else {
        count += 1
        counter[offset] = count
    }
    prevNum = element
}

print(counter.map { String($0) }.joined(separator: " "))