CodeUp - 3004 : 데이터 재정렬

김준태·2023년 2월 28일
0

코딩테스트

목록 보기
7/13

3004 : 데이터 재정렬

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 데이터 갯수 입력받기
        int count = scanner.nextInt();
        // 데이터 리스트 생성 (리모컨)
        List<Data> dataList = new ArrayList<>();

        // 데이터 리스트 값 입력받기
        for (int i = 0; i < count; i++) {
            int value = scanner.nextInt();
            // 0인 이유는 나중에 다시 설정하기 위해서
            dataList.add(new Data(0, value));
        }
        // Value 값 오름차순으로 정렬한 리스트 복사본 만들기
        List<Data> dataStreamList = dataList.stream()
                // Value 값을 오름차순
                .sorted((e2, e1) -> e2.getValue() - e1.getValue())
                .collect(Collectors.toList());
        // 중요 !!!
        // 오름차순으로 정렬한 복사본(dataStreamList) setId를 하면 원래 있었던 dataList 또한 Id값이 설정된다.
        for (int i = 0; i < dataStreamList.size(); i++) {
            dataStreamList.get(i).setId(i);
        }
        String result = dataList
                .stream()
                .map(e -> e.getId() + "")
                .collect(Collectors.joining(" "));

        System.out.println(result);
    }
}

class Data {
    int id;
    int value;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "Data{" +
                "id = " + id +
                ", value = " + value +
                '}';
    }

    Data(int id, int value) {
        this.id = id;
        this.value = value;
    }
}

0개의 댓글