→ Problems
[Algorithm] 백준 - 18870번 좌표 압축 (Swift)
Swift librarian
2024. 8. 13. 15:08
문제 소개
사실 문제를 처음보고 이해를 못했는데 🥲 예시를 보고 이해가 되었다.
과정은 다음과 같다.
- 좌표를 오름차순으로 정렬하고, 중복되는 값을 제거해준다.
- 원래 배열에 1번에서 만든 정렬된 배열의 인덱스로 바꾼뒤 출력해준다.
문제 풀이
아래처럼 nums를 Set으로 만들어 준 뒤, 정렬했다.
// Set<Int>로 만들어주는 부분!
let arr = Set(nums).sorted()
아래와 같이 딕셔너리를 만든다
// 인덱스를 value, 배열의 값을 key로 딕셔너리 자료구조로 만들기
let dic = Dictionary(uniqueKeysWithValues: arr.enumerated().map { ($1, $0) })
정답 코드
import Foundation
let n = Int(readLine()!)!
var nums = readLine()!.split(separator: " ").map { Int($0)! }
func main() {
var ans = ""
let arr = Set(nums).sorted()
let dic = Dictionary(uniqueKeysWithValues: arr.enumerated().map { ($1, $0) })
for num in nums {
ans += "\(dic[num, default: 0]) "
}
print(ans)
}
main()