관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[알고리즘] 백준 18870 좌표 압축 -정렬- 자바 코틀린 본문

알고리즘/문자열, 정렬

[알고리즘] 백준 18870 좌표 압축 -정렬- 자바 코틀린

막무가내막내 2021. 5. 11. 12:25
728x90

 

www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

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

www.acmicpc.net

 

백준 정렬 단계별풀기 마지막 문제인 좌표 압축문제를 풀어봤습니다. ㅎㅎ 

분명 정렬 마지막문제를 풀었던 것 같은데 새로 생긴건지 잘 모르겠네요 흠..

 

숫자들이 있으면 그것을 정렬했을때의 자신의 좌표값으로 압축하면 되는 문제였습니다.

같은 숫자인 경우는 가장 앞에 있는 좌표값으로 통일시킵니다.

 

풀이는 다음과 같습니다.

 

[Java]

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    private static Map<Integer, Integer> map = new HashMap<>();
    private static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] nums = new int[N];
        int[] sortNums = new int[N];
        for (int i = 0; i < N; i++) {
            int num = sc.nextInt();
            nums[i] = num;
            sortNums[i] = num;
        }
        //오름차순 정렬
        Arrays.sort(sortNums);
        int cnt = 0;
        for (int i = 0; i < N; i++) {
            if (map.get(sortNums[i]) == null) { //아직 압축 안된 숫자인 경우
                map.put(sortNums[i], cnt++);
            }
        }

        for (int i = 0; i < N; i++) {
            sb.append(map.get(nums[i])).append(" ");
        }
        System.out.println(sb.toString());
    }
}

 

[Kotlin]

import java.util.*


private val map: MutableMap<Int, Int> = HashMap()
private val sb = StringBuilder()

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val N = sc.nextInt()
    val nums = IntArray(N)
    val sortNums = IntArray(N)
    for (i in 0 until N) {
        val num = sc.nextInt()
        nums[i] = num
        sortNums[i] = num
    }
    //오름차순 정렬
    Arrays.sort(sortNums)
    var cnt = 0
    for (i in 0 until N) {
        if (map[sortNums[i]] == null) { //아직 압축 안된 숫자인 경우
            map[sortNums[i]] = cnt++
        }
    }
    for (i in 0 until N) {
        sb.append(map[nums[i]]).append(" ")
    }
    println(sb.toString())
}

github.com/mtjin/algorithm_practice/tree/master/%EB%B0%B1%EC%A4%80%2018870%20%EC%A2%8C%ED%91%9C%20%EC%95%95%EC%B6%95%20-%EC%A0%95%EB%A0%AC-

 

mtjin/algorithm_practice

알고리즘 문제풀이 연습. Contribute to mtjin/algorithm_practice development by creating an account on GitHub.

github.com

 

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!

 

 

728x90
Comments