누룽지맛치킨
어미새의 개발일지
누룽지맛치킨
전체 방문자
오늘
어제
  • 분류 전체보기 (86)
    • 코틀린 (8)
    • 안드로이드 (5)
      • 디자인 (2)
      • 개발 (2)
      • 도구 (1)
    • 피그마 (1)
    • 대외활동 (0)
    • 프로젝트 (0)
    • 백준 (55)
      • JAVA (55)
    • 알고리즘 (3)
    • 클라우드 (5)
    • 스터디 (2)
      • 코테 (2)
    • 자료구조 (5)
    • 컴퓨터 기술 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Room version 올리기
  • 알고리즘 조합
  • 백준 자바 2559번
  • 백준 자바 2292번
  • 백준 자바 정렬
  • 클라우드 컴퓨팅
  • 클라우드
  • 코틀린 인 액션
  • 자바 Priority Queue
  • 백준 자바 누적합
  • 안드로이드
  • 백준 자바 수열
  • 자료구조
  • 백준 자바 다이나믹 프로그래밍
  • Room Migration
  • 안드로이드 디자인
  • 코틀린 runBlocking
  • 코틀린
  • 백준 자바 벌집
  • 백준 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
누룽지맛치킨

어미새의 개발일지

백준/JAVA

[백준/JAVA] 18870번 좌표 압축

2023. 2. 6. 15:34
  • 좌표 압축
    https://www.acmicpc.net/problem/18870

1. 문제

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.

X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.

2. 문제 접근

1) 첫째 줄에 좌표의 개수 N을 입력받는다.
2) N만큼 좌표를 입력받아서 배열에 저장한다.
3) 정렬되기 전의 배열이 후에 필요하기 때문에 배열을 하나 복사하여 만들어둔다.
4) 병합정렬을 이용하여 배열을 정렬한다.
5) 해쉬맵을 이용하여 정렬된 수와 해당하는 인덱스를 저장한다. 이 때, 이미 저장된 수는 저장하지 않는다.
6) 원본 배열을 순회하면 해당하는 해쉬맵 value 값을 출력한다.

3. 코드

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
    static int data[];
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int arr[] = new int[N];
        data = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        int num[] = new int[N];
        for(int i=0;i<N;i++) {
            arr[i] = Integer.parseInt(st.nextToken());
            num[i] = arr[i];

        }
        MergeSort(arr, 0, N-1);
        int arrayed[] = new int[N];
        int t= 1;
        HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
        for(int i=0;i<N;i++) {
            hash.put(arr[0], 0);
            if(i>0 && arr[i] !=arr[i-1]) {
                hash.put(arr[i], t);
                t++;
            }
        }
        for(int i=0;i<N;i++) {
            sb.append(hash.get(num[i])).append(" ");
        }

        System.out.print(sb);
    }

    static void Merge(int arr[], int start, int mid, int end) {
        int i = start;
        int j = mid+1;
        int k = start;

        while(i<=mid && j<=end) {
            if(arr[i]< arr[j]) {
                data[k] = arr[i];
                i++;
            }
            else {
                data[k] = arr[j];
                j++;
            }
            k++;
        }
        if(i>mid) {
            for(int t=j;t<=end;t++) {
                data[k] = arr[t];
                k++;
            }
        }
        else {
            for(int t=i;t<=mid;t++) {
                data[k] = arr[t];
                k++;
            }
        }
        for(int t=start; t<=end;t++) {
            arr[t] = data[t];
        }
    }

    static void MergeSort(int arr[], int start, int end) {

        if(start<end) {
            int mid = (start + end)/2;

            MergeSort(arr, start, mid);
            MergeSort(arr, mid+1, end);
            Merge(arr, start, mid, end);
        }
    }

}

'백준 > JAVA' 카테고리의 다른 글

[백준/JAVA] 단계별로 풀어보기(7단계) 기본 수학 1  (0) 2023.02.06
[백준/JAVA] 11729번 하노이 탑 이동 순서  (0) 2023.02.06
[백준/JAVA] 10814번 나이순 정렬  (0) 2023.02.06
[백준/JAVA] 11650번 좌표 정렬하기  (0) 2023.02.06
[백준/JAVA] 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰  (0) 2023.02.06
    '백준/JAVA' 카테고리의 다른 글
    • [백준/JAVA] 단계별로 풀어보기(7단계) 기본 수학 1
    • [백준/JAVA] 11729번 하노이 탑 이동 순서
    • [백준/JAVA] 10814번 나이순 정렬
    • [백준/JAVA] 11650번 좌표 정렬하기
    누룽지맛치킨
    누룽지맛치킨

    티스토리툴바