[백준 / 실버2] 18870 좌표 압축 (Java)

wannabeking·2022년 7월 8일
0

코딩테스트

목록 보기
30/155

문제 보기



사용한 것

  • 문제를 해결하기 위해 정렬, HashMap 사용


풀이 방법

  • 입력 값을 arr, tmpArr 두 배열로 받는다.
  • tmpArr을 정렬하고 map에 값과 몇 번째 순서인지 넣어준다.
  • arr을 순회하며 map에서 해당 값의 value가 해당 값보다 큰 값의 수이므로 sb에 추가 후 출력한다.


코드

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int length = Integer.parseInt(br.readLine());
        int[] arr = new int[length];
        int[] tmpArr = new int[length];
        StringTokenizer st = new StringTokenizer(br.readLine());
        int index = 0;
        while (st.hasMoreTokens()) {
            int num = Integer.parseInt(st.nextToken());
            arr[index] = num;
            tmpArr[index] = num;
            index++;
        }

        Arrays.sort(tmpArr);

        Map<Integer, Integer> map = new HashMap<>();
        int ct = 0;
        for (int i = 0; i < length; i++) {
            if (!map.containsKey(tmpArr[i])) {
                map.put(tmpArr[i], ct++);
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            sb.append(map.get(arr[i]) + " ");
        }

        System.out.println(sb);
    }
}


profile
내일은 개발왕 😎

0개의 댓글