Where who wants to meet someone
백준 Swift [18870] 좌표 압축 본문
728x90
난이도
실버 II
문제
https://www.acmicpc.net/problem/18870
내 답안
let n = Int(readLine()!)!
var arr = readLine()!.split(separator: " ").map { Int($0)! }
var dictionary = [Int:Int]()
var count = 0
for i in arr.sorted() {
if dictionary[i] == nil {
dictionary[i] = count
count += 1
}
}
print(arr.map { String(dictionary[$0]!) }.joined(separator: " "))
- 처음에는 forEach와 if문을 통해 구성하였으나 시간 초과가 났다.
- dictionary를 사용하는 방법을 적용하여 해결할 수 있었다.
- arr.sorted를 통해 숫자가 작은 것부터 순차적으로 정렬이 되는데, 그것을 가지고 dictionary에 해당 키가 없으면 count를 값으로 넣어주는 방식이다.
맨 첫번째 값은 어차피 더 작은(이전의) 값이 없기 때문에 0으로 시작, 다음 차례로 갈 수록 이전의 값이 생기므로 +1씩 해주는 방식이다.
이후 출력은 dictionary의 $0 값을 map을 통해 배열로 만들고 그것을 공백을 주어 joined한 것을 출력하며 마무리했다.
'백준 알고리즘 문제 기록 > 정렬' 카테고리의 다른 글
정렬의 종류 (0) | 2023.08.07 |
---|---|
백준 Swift [10814] 나이순 정렬 (0) | 2023.08.07 |
백준 Swift [1181] 단어 정렬 (2) | 2023.08.04 |
백준 Swift [11651] 좌표 정렬하기 2 (0) | 2023.08.04 |
백준 Swift [11650] 좌표 정렬하기 (0) | 2023.08.02 |