본문 바로가기

알고리즘

[백준][KOTLIN] 18870 좌표 압축

728x90

 

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net

 

풀이

  1. 좌표를 입력 받는다. 이때 입력 받은 좌표를 정렬할 좌표를 하나 더 선언한다.
  2. 정렬된 좌표를 이용하여 좌표 압축 조건을 저장하는 Map Data 를 선언한다.
  3. 저장된 Map Data 를 출력 한다.

코드

import java.io.*
import java.util.*

fun main(args: Array<String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val n = br.readLine().toInt() // 개수 입력 받기
    val input = mutableListOf<Int>()
    val compress = mutableListOf<Int>()
    val resultMap = mutableMapOf<Int, Int>()

    br.readLine().split(" ")
        .map {
            input.add(it.toInt()) // 입력된 숫자 저장
            compress.add(it.toInt()) // 입력된 숫자를 정렬한 리스트
        }

    Collections.sort(compress)
    var count = 0
    for (i in 0 until compress.size) {
        if (resultMap[compress[i]] == null) {
            resultMap[compress[i]] = count++
        }
    }

    for (i in 0 until n) {
        bw.write("${resultMap[input[i]]} ")
    }

    bw.flush()
    bw.close()
    br.close()
}
728x90