문제
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.
X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.
입력
첫째 줄에 N이 주어진다.
둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.
출력
첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.
풀이
x1 좌표를 압축한다 -> 주어진 좌표중에서 x1좌표보다 작은 좌표의 개수로 변환됨
-> 입력받은 x좌표를 배열로 만들어 오름차순으로 정렬 했을 때 인덱스 값이 곧 압축값이다
배열로 입력받으면 중복값이 있으므로 아예 인덱스를 구할땐 Set으로 변환했다
그리고 바로 map 고차함수를 사용하기위해 dict에 넣어두었다.
이 문제는 시간이 매우촉박해서 최대한 시간을 줄였어야했다
let input = Int(readLine()!)!
var nums = readLine()!.split(separator: " ").map{ Int(String($0))! }
var sortedSet = Set(nums).sorted{ $0 < $1}.enumerated()
var dict = [ Int: Int]()
for (index, number) in sortedSet {
dict[number] = index
}
print(nums.map{ String(dict[$0]!)}.joined(separator: " "))
'코딩테스트 > 백준' 카테고리의 다른 글
BOJ-14425 문자열 집합 Swift (0) | 2023.04.06 |
---|---|
BOJ-10815 숫자 카드 Swift (0) | 2023.04.06 |
BOJ-10814 나이순 정렬 Swift (0) | 2023.04.05 |
BOJ-1181 단어 정렬 Swift (0) | 2023.04.05 |
BOJ-11650,11651 좌표 정렬하기 Swift (0) | 2023.04.05 |