https://www.acmicpc.net/problem/2910
2910번: 빈도 정렬
첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다.
www.acmicpc.net
링크드해쉬맵을 이용하면 클래스를 만들 필요가 없다.
import java.io.*;
import java.util.*;
public class Main
{
public static class Num{
Integer num;
Integer count;
Integer idx;
public Num(Integer num, Integer count, Integer idx){
this.num=num;
this.count=count;
this.idx = idx;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
HashMap<Integer,Integer> hashmap = new HashMap();
HashMap<Integer,Integer> order = new HashMap();
String[] input1 = br.readLine().split(" ");
String[] input2 = br.readLine().split(" ");
int index=0;
for(String s: input2){
hashmap.put(Integer.valueOf(s),hashmap.getOrDefault(Integer.valueOf(s),0)+1);
if(!order.containsKey(Integer.valueOf(s))) {
order.put(Integer.valueOf(s),index++);
}
}
List<Num> nums = new ArrayList<>();
for(int i=0; i<input2.length; i++){
nums.add(new Num(Integer.valueOf(input2[i]),hashmap.get(Integer.valueOf(input2[i])),order.get(Integer.valueOf(input2[i]))));
}
Collections.sort(nums,(n1,n2)->{
if(n2.count==n1.count){
return n1.idx-n2.idx;
}
return n2.count-n1.count;
});
for(Num n : nums){
bw.write(n.num+" ");
}
bw.flush();
}
}
import java.util.*;
class Main
{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int C = sc.nextInt();
Map<Integer, Integer> messages = new LinkedHashMap<>();
for (int i = 0; i < N; i++) {
int message = sc.nextInt();
messages.put(message, messages.getOrDefault(message, 0) + 1);
}
Integer[] frequencies = messages.keySet().toArray(new Integer[messages.size()]);
Arrays.sort(frequencies, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return messages.get(o2) - messages.get(o1);
}
});
for (int frequency : frequencies) {
int count = messages.get(frequency);
while (count-- > 0)
System.out.print(frequency + " ");
}
System.out.println();
}
}
'Problem Solving > 정렬' 카테고리의 다른 글
BOJ1431 시리얼 번호 (2) | 2024.02.07 |
---|---|
BOJ1931 회의실 배정(R) 대표문제 (1) | 2024.02.06 |
BOJ18870 좌표압축 (0) | 2024.02.06 |
BOJ1302 베스트셀러 (0) | 2024.02.06 |
BOJ 7785 회사에 있는 사람 (1) | 2024.02.06 |
https://www.acmicpc.net/problem/2910
2910번: 빈도 정렬
첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다.
www.acmicpc.net
링크드해쉬맵을 이용하면 클래스를 만들 필요가 없다.
import java.io.*;
import java.util.*;
public class Main
{
public static class Num{
Integer num;
Integer count;
Integer idx;
public Num(Integer num, Integer count, Integer idx){
this.num=num;
this.count=count;
this.idx = idx;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
HashMap<Integer,Integer> hashmap = new HashMap();
HashMap<Integer,Integer> order = new HashMap();
String[] input1 = br.readLine().split(" ");
String[] input2 = br.readLine().split(" ");
int index=0;
for(String s: input2){
hashmap.put(Integer.valueOf(s),hashmap.getOrDefault(Integer.valueOf(s),0)+1);
if(!order.containsKey(Integer.valueOf(s))) {
order.put(Integer.valueOf(s),index++);
}
}
List<Num> nums = new ArrayList<>();
for(int i=0; i<input2.length; i++){
nums.add(new Num(Integer.valueOf(input2[i]),hashmap.get(Integer.valueOf(input2[i])),order.get(Integer.valueOf(input2[i]))));
}
Collections.sort(nums,(n1,n2)->{
if(n2.count==n1.count){
return n1.idx-n2.idx;
}
return n2.count-n1.count;
});
for(Num n : nums){
bw.write(n.num+" ");
}
bw.flush();
}
}
import java.util.*;
class Main
{
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int C = sc.nextInt();
Map<Integer, Integer> messages = new LinkedHashMap<>();
for (int i = 0; i < N; i++) {
int message = sc.nextInt();
messages.put(message, messages.getOrDefault(message, 0) + 1);
}
Integer[] frequencies = messages.keySet().toArray(new Integer[messages.size()]);
Arrays.sort(frequencies, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return messages.get(o2) - messages.get(o1);
}
});
for (int frequency : frequencies) {
int count = messages.get(frequency);
while (count-- > 0)
System.out.print(frequency + " ");
}
System.out.println();
}
}
'Problem Solving > 정렬' 카테고리의 다른 글
BOJ1431 시리얼 번호 (2) | 2024.02.07 |
---|---|
BOJ1931 회의실 배정(R) 대표문제 (1) | 2024.02.06 |
BOJ18870 좌표압축 (0) | 2024.02.06 |
BOJ1302 베스트셀러 (0) | 2024.02.06 |
BOJ 7785 회사에 있는 사람 (1) | 2024.02.06 |