https://www.acmicpc.net/problem/2910
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int c = sc.nextInt();
Integer[] input = new Integer[n];
int[] seq = new int[c+1];
Map<Integer, Integer> m = new HashMap<>();
int idx = 1;
for (int i = 0; i < n; i++) {
int tmp = sc.nextInt();
input[i] = tmp;
if (!m.containsKey(tmp)) {
m.put(tmp, 1);
seq[tmp] = idx++;
} else {
int val = m.get(tmp);
m.put(tmp, val + 1);
}
}
Arrays.sort(input, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (m.get(o2) - m.get(o1) == 0) {
return seq[o1] - seq[o2];
} else {
return m.get(o2) - m.get(o1);
}
}
});
StringBuilder sb = new StringBuilder();
for (int i : input) {
sb.append(i).append(" ");
}
System.out.println(sb);
}
}
์ค๋ต๋ ธํธ(ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์ )
์ฒซ๋ฒ์งธ ์๋๋ Comparator ๋ฅผ ์ด์ฉํ ์ ๋ ฌ์ด์๋ค. ์ด๋ ๊ฒ ํ๋๊น ๋น๋๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ์
๋ ฅ์ ์ ๋ ฌ์ด ์๋๋ผ ๋๊ฐ์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ผ์ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์์๋ค.
๋๋ฒ์งธ ์๋๋ ์์น๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ ํ๋ ํ๋ ๊ฒ์ด์๋ค.
->์ถ๋ ฅ์ ์ ๋์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ๋ฐ์
-> ๋ค์ด์ฌ ์ ์๋ ๊ฐ์ด 10์ต๊น์ง ์์. -> ๋น์ฐํ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ ๋ฐ์ํ๊ฒ ๋จ 4byte * 10์ต = 4๊ธฐ๊ฐ
-> ์ด๊ฑฐ๋ map์ผ๋ก ๋ฌถ์ด๋ณด์
์ ๋ต์ฝ๋
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int c = sc.nextInt();
Integer[] input = new Integer[n];
Map<Integer, Integer> m = new HashMap<>();
Map<Integer, Integer> seq = new HashMap<>();
int idx = 1;
for (int i = 0; i < n; i++) {
int tmp = sc.nextInt();
input[i] = tmp;
if (!m.containsKey(tmp)) {
m.put(tmp, 1);
seq.put(tmp, idx++);
} else {
int val = m.get(tmp);
m.put(tmp, val + 1);
}
}
// System.out.println(seq.toString());
Arrays.sort(input, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (m.get(o2) - m.get(o1) == 0) {
return seq.get(o1) - seq.get(o2);
} else {
return m.get(o2) - m.get(o1);
}
}
});
StringBuilder sb = new StringBuilder();
for (int i : input) {
sb.append(i).append(" ");
}
System.out.println(sb);
}
}
์์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ map์ผ๋ก ๋ง๋๋๊น ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ฅผ ํผํ ์ ์์๋ค.
๋ฌธ์ ๋ฅผ ๋ค ํ๊ณ ์๊ฒ ๋ ๊ฑด๋ฐ LinkedHahMap์ ์ด์ฉํ๋ฉด key ๊ฐ์ด ์ ๋ ฅ ์์๋๋ก ์ ์ง๋๋ค๋ ๊ฒ์ ์์๋ค. ์ด๊ฑธ ์ด์ฉํด ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ผ๊ฒ ๋ค. ๋น์ทํ ๋งฅ๋ฝ์ผ๋ก TreeSet์ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ ์ ๊ฑฐํ๋ฉด์, ์ค๋ฆ์ฐจ์์ผ๋ก ๊ฐ์ ๋ด์ ์ ์๋ค. ์ด๊ฑธ ๊ทธ๋๋ก List๋ก ๋ณํํ๋ค๋ฉด ์ค๋ณต์ด ์ ๊ฑฐ๋๊ณ ์ ๋ ฌ๋ ์ํ์ List๋ฅผ ๋ฐ์ ์ ์๋ค.
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^
๋ฐ์ํ
'OJ๐ผ > ์ค๋ต๋ ธํธ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][JAVA] 1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2024.02.07 |
---|---|
[BOJ][JAVA] 15988: 1, 2, 3 ๋ํ๊ธฐ 3 (0) | 2024.01.28 |
[BOJ][JAVA] 1181: ๋จ์ด์ ๋ ฌ (0) | 2024.01.23 |
[BOJ][JAVA] 1021: ํ์ ํ๋ ํ (0) | 2024.01.16 |
[BOJ][JAVA] 11068: ํ๋ฌธ์ธ ์ (0) | 2024.01.14 |