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/
결국 위 링크에서 나오는 정리는, 주어진 값들을 작은 순서부터 정렬한 후 그 순번을 처음 주어진 값에 맞추어 출력하는 문제라고 한다.
이 문제를 풀면서 생각한 논리적 흐름은
- 입력받을 Int의 갯수 N을 입력받는다.
- arr에 Int를 N개 만큼 저장한 뒤, 오름차순으로 정리된 arr의 값들에 dictionary를 이용해 순서를 저장해준다.
- 그 후 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)
- Joined(): 배열에 들어있는 여러 원소들을 하나로 묶을 때 사용하는 메소드.