→ Problems

[Algorithm] 백준 - 18870번 좌표 압축 (Swift)

Swift librarian 2024. 8. 13. 15:08

문제 소개

사실 문제를 처음보고 이해를 못했는데 🥲 예시를 보고 이해가 되었다.

과정은 다음과 같다.

  1. 좌표를 오름차순으로 정렬하고, 중복되는 값을 제거해준다.
  2. 원래 배열에 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()