반응형
주어진 문제의 조건을 맞추기 위해 숫자에 대해 2개의 값을 저장했습니다. ( 개수, 인덱스 )
1차적으로 개수를 기준으로 내림차순 정렬하고 개수가 같을 경우 인덱스를 기준으로 오름차순 정렬을 하였습니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st1 = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(st1.nextToken());
int c = Integer.parseInt(st1.nextToken());
StringTokenizer st2 = new StringTokenizer(br.readLine());
HashMap<Integer, int[]> map = new HashMap<>(n); // 0은 개수, 1은 인덱스
int idx = 0;
while (st2.hasMoreTokens()){
int in = Integer.parseInt(st2.nextToken());
if (map.containsKey(in))
map.put(in, new int[]{map.get(in)[0]+1, map.get(in)[1]});
else map.put(in, new int[]{1, idx++});
}
map.entrySet().stream().sorted(new Comparator<Map.Entry<Integer, int[]>>() {
@Override
public int compare(Map.Entry<Integer, int[]> o1, Map.Entry<Integer, int[]> o2) {
if (o2.getValue()[0]==o1.getValue()[0])
return o1.getValue()[1]-o2.getValue()[1];
return o2.getValue()[0]-o1.getValue()[0];
}
}).forEach(i->{
for (int j=0; j<i.getValue()[0]; j++)
sb.append(i.getKey()+" ");
});
System.out.print(sb);
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 15663번 N과 M (9) [ Java ] (0) | 2021.01.14 |
---|---|
백준 5903번 Moo 게임 [ Java ] (0) | 2021.01.13 |
백준 11652번 카드 [ Java ] (0) | 2021.01.12 |
백준 17478번 재귀함수가 뭔가요? [ Java ] (0) | 2021.01.11 |
백준 16505 별 [ Java ] (0) | 2021.01.09 |