요구능력 : 최대한 시간을 줄여서 코딩할 수 있느냐
코드설명 :
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: " "))")
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
Swift) 백준 1037번 (약수) (0) | 2021.08.25 |
---|---|
Swift) 백준 4375번 (1)(종료조건 EOF) (0) | 2021.08.24 |
Swift) 백준 10814번 (나이순 정렬) (0) | 2021.08.23 |
Swift) 백준 1181번 (단어 정렬) (0) | 2021.08.23 |
Swift) 백준 11651번 (좌표 정렬하기2) (0) | 2021.08.23 |
댓글