본문 바로가기
Algorithm/문제풀이_백준

Swift) 백준 18870번 (좌표압축)

by Joahnee 2021. 8. 24.

요구능력 : 최대한 시간을 줄여서 코딩할 수 있느냐 

 

코드설명 : 

 

1. 입력 받은 수를 오름차순으로 정렬한 것을 반복하면서 비어있는 키에 값을 넣어준다.

이 때 오름차순 정렬이므로 맨 첫번째 수는 자기보다 작은 수가 하나도 없을 것이다. 그래서 0이고 다음 1 다음 2...

 

2. dictionary의 value를 굳이 반복문을 쓰지 않아도 한번에 출력할 수 있는 방법이다.

 

후기 : 시간단축하는게 정말 어려운것같다.. 답을 찾는 코드는 2가지정도 짜봤는데 시간초과때문에 다른 사람것을 보고 이해하고 넘어가기로 했다. 내가 항상 for문을 이용해서 받고 출력했던 것들을 굳이 for문없이 사용하고 출력하는 법을 배웠다.

let n = Int(readLine()!)!
let arr = readLine()!.split(separator: " ").map{Int(String($0))!}
var dict = [Int:Int]()
var next = 0
for i in arr.sorted() {
    if dict[i] == nil {
        dict[i] = next
        next += 1
    }
}
print("\(arr.map{ String(dict[$0]!) }.joined(separator: " "))")

댓글