TIL/알고리즘 공부

백준 18870번 Swift 알고리즘 연습

여의도사노비 2022. 9. 15. 14:04
728x90

좌표압축..!

 

이 문제는 문제를 이해를 못했다 ^^

좌표압축이 뭔지 제대로 설명이 없었어서 예시 답안으로 나온 사례들이 왜 그 값이 입력됐을 때 왜 그 값이 출력되는지...

이해를 못해서 여러 풀이들을 참고하다가 좌표압축에 관하여 간단하게 설명해주신 분이 계셔서 참고하였다.

 

https://taxol1203.github.io/codingtest/bj-%EC%A2%8C%ED%91%9C-%EC%95%95%EC%B6%95/

결국 위 링크에서 나오는 정리는, 주어진 값들을 작은 순서부터 정렬한 후 그 순번을 처음 주어진 값에 맞추어 출력하는 문제라고 한다.

 

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. 입력받을 Int의 갯수 N을 입력받는다.
  2. arr에 Int를 N개 만큼 저장한 뒤, 오름차순으로 정리된 arr의 값들에 dictionary를 이용해 순서를 저장해준다.
  3. 그 후 arr에 기존 원소의 위치를 기준으로 오름차순으로 정리됐을 때 원소들의 위치를 표시해준다.

 

 

* 18870번

let N = Int(readLine()!)!
let arr = readLine()!.split(separator: " ").map{ Int(String($0))! }
var dict = [Int : Int]()
var move = 0

for i in arr.sorted() {
    if dict[i] == nil {
        dict[i] = move
        move += 1
    }
}

print("\(arr.map{ String(dict[$0]!) }.joined(separator: " "))")

 

 

정리(Today I Learned)

  1. Joined(): 배열에 들어있는 여러 원소들을 하나로 묶을 때 사용하는 메소드.