์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํธ๋ ์ค์ ๋งค์ฐ ๊น๋ํ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ ๋ ์ด์ฌํ ํต์ํธ๋ก ๋ฌธ์ ๋ฅผ ํ์๋๋ฐ, ์ด๋ค ๋ถ๋ค์ Arrays.sort์ lambda ํจ์๋ฅผ ์ฌ์ฉํด์ ์์ฃผ ๊น๋ํ ์ฝ๋๋ก ํ์ด๋ฅผ ์์ฑํ ๊ฒ์ด์์ฃ !!!
์ ๋ ๊ทธ๋ฐ ์์ผ๋ก ์ฝ๋ฉํด๋ณธ ์ ์ด ์์ด์ ํ ์ค์ฉ ๋ฏ์ด๋ดค๋๋ฐ,
์ฌ์ค '์ ์ฝ๋๊ฐ ๋๋์ฒด ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํ๋ ์ฝ๋์ธ๊ฑฐ์ง???' ํ๋ ์๊ฐ์ด ๊ณ์ ๋ค์์ต๋๋ค.
๊ทธ๋์ ๋ค์ ์ฐพ์๋ณด๋ฉด์ ์ดํด๋ฅผ ํ๊ณ ๋ฉ๋ชจ๋ฅผ ํด๋๋ ค๊ณ ํฉ๋๋น
์ ๋ ฌํ๋ ๋ถ๋ถ๋ง ์์ฑํด๋ ์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// ์์ ์ฝ๋
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr1d = new int[]{5,3,1,4,2,5};
int[][] arr2d = new int[][]{{5,10},{3,30},{1,50},{4,20},{2,40},{5,60}};
Arrays.sort(arr1d);
System.out.println(Arrays.toString(arr1d));
// ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Arrays.sort(arr2d, (o1, o2) -> {
return o1[0] - o2[0];
});
System.out.println(Arrays.deepToString(arr2d));
// ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
Arrays.sort(arr2d, (o1, o2) -> {
return o2[0] == o1[0] ? o2[1] - o1[1] : o2[0] - o1[0];
});
System.out.println(Arrays.deepToString(arr2d));
}
}
// ์คํ ๊ฒฐ๊ณผ
[1, 2, 3, 4, 5, 5]
[[1, 50], [2, 40], [3, 30], [4, 20], [5, 10], [5, 60]]
[[5, 60], [5, 10], [4, 20], [3, 30], [2, 40], [1, 50]]
์ ๊ฐ ์ดํดํ์ง ๋ชปํ๋ ๋ถ๋ถ์ Arrays.sort() ํจ์์ ๋ ๋ฒ์งธ ์ธ์์ ๋ค์ด๊ฐ ๋๋ค ํจ์๋ก ์ธํด, ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ๋๋ค๋ ๋ถ๋ถ์ด์์ต๋๋ค.
๋บ...๋ค๊ณ ์ ์ ๋ ฌ์ด ๋ . . ? ์ด๋ฐ ์๊ฐ์ด์๋ ๊ฒ์ด์ฃฑ
์ด๊ฑธ ์ดํดํ๊ธฐ ์ํด sort ํจ์๋ฅผ ๊น๋ณด์์ต๋๋ค.
sort ๋ฉ์๋์ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public static <T> void sort(T[] a, Comparator<? super T> c)
์ค. ์ ๋ sort ํจ์์ c ๋ผ๋ ์ธ์๊ฐ ์๋์ง๋ ๋ชฐ๋์์ต๋๋ค.
Comparator ๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊น ๋ด ๋๋ค. FunctionalInterface๋ค์.
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. ๋ผ๊ณ ์ค๋ช ์ด ์จ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฑด sort()ํจ์์ ๊ตฌํ๋์ด์๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ์ผ๋ถ์ ๋๋ค.
์ ๊ฐ ๋ฐ์ค ์น ๋ถ๋ถ์ ์กฐ๊ฑด์ด ์ฐธ์ด ๋๋ฉด ์์๋ฅผ ๋ฐ๊พผ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ฆ, ์ฒซ ๋ฒ์งธ ๊ฐ(o1)์ด ๋ ๋ฒ์งธ ๊ฐ(o2)๋ณด๋ค ํฌ๋ฉด -> c.compare() ํจ์ ๊ฐ์ด ์์๊ฐ ๋๊ณ -> ๋ ๊ฐ์ ์์๋ฅผ ๋ฐ๊ฟ๋๋ค.
์ ๋ค์ ์ ๋ฆฌ๋ฅผ ํด๋ด ์๋ค.
1. Arrays.sort()๋ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๋ฉ์๋์ด๊ณ , Comparator๋ฅผ ์ด์ฉํด์ ๋ ์์๋ฅผ ๋น๊ตํ๋ ๋ฐฉ์์ ์ง์ ์ง์ ํ ์ ์์ต๋๋ค. ์ฆ, ์ฌ์ฉ์ ์ ์ ๋น๊ต ๊ธฐ์ค์ ๋๋ค.
2. Comparator์ ๋์ ๋ฐฉ์: ๋ ๊ฐ์ ๊ฐ(o1, o2)์ ๋น๊ตํด์ o1 < o2์ด๋ฉด ์์๋ฅผ, o1 == o2์ด๋ฉด 0์, o1 > o2์ด๋ฉด ์์๋ฅผ ๋ฆฌํดํฉ๋๋ค. ์์๋ฅผ ๋ฐ๊พธ๋ ์ธก๋ฉด์์ ๋ณด๋ฉด,
- ๋ ๊ฐ์ ๋น๊ตํด์ 0 ๋๋ ์์๊ฐ ๋์ค๋ฉด, ๋ ๊ฐ์ ์์๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
- ๋ ๊ฐ์ ๋น๊ตํด์ ์์๊ฐ ๋์ค๋ฉด, ๋ ๊ฐ์ ์์๋ฅผ ๋ฐ๊ฟ๋๋ค.
๊ทธ๋ผ ์ด์ ๋ค์ ์๊น์ ๋๋ค ํจ์๋ก ๋์๊ฐ ๋ด ์๋ค.
o1[0] - o2[0]์ ๊ณ์ฐํ์ ๋ ์์์ด๋ฉด ๊ทธ๋๋ก ๋ก๋๋ค.
๊ทธ๋ฌ๋๊น o1[0], o2[0] ์์๋๋ก ๋๋ค๋ ๊ฒ์ด๊ณ , ์ ๊ฐ์ด ์์๋ผ๋ ๊ฒ์ o2[0]์ด o1[0]๋ณด๋ค ํฌ๋ค๋ ๋ป์ ๋๋ค.
์ฆ, `์์ ๊ฐ, ํฐ ๊ฐ` ์์๋๋ก ์ ๋ ฌ์ด ๋๋ ๊ฒ์ ๋๋ค.
๋ฐ๋๋ก, o1[0] - o2[0]์ ๊ณ์ฐํ์ ๋ ์์์ด๋ฉด ์ ๋ค ๊ฐ์ ๋ฐ๊ฟ๋๋ค. ๊ทธ๋ฌ๋ฉด o2[0], o1[0] ์์๊ฐ ๋๋ค๋ ๋ป์ด๊ณ , ์ ๊ฐ์ด ์์๋๊น o1[0] > o2[0] ์ ๋๋ค.
์ฆ, ์ด๋ฒ์๋ `์์ ๊ฐ, ํฐ ๊ฐ` ์์๋๋ก ์ ๋ ฌ์ด ๋๋ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ์๋ฆฌ๋ก ์ธํด ์ ๋๋ค ํจ์๋ฅผ ํตํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๊ฐ๋ฅํด์ง ๊ฒ์ ๋๋ค.
์ ๊ฐ ์๊น ๊ถ๊ธํ๋ ๋ถ๋ถ์ด ํด๊ฒฐ๋์์ต๋๋ค!!!
Q: ๋บ์ ์ ํ๋ค๊ณ ์ ์ ๋ ฌ์ด ๋๋ ๊ฒ์ผ๊น?
A: ๋บ์ ์ ํ๋ ์ด์ ๋, ๋ ๊ฐ์ ๋น๊ตํ๊ณ ๊ทธ ์ฐจ์ด์ ๋ฐ๋ผ ์ ๋ ฌ ์์๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํจ์ ๋๋ค. ์ฐจ์ด๊ฐ ์์์ด๋ฉด ์ฒซ ๋ฒ์งธ ๊ฐ์ด ๋ ์์ ๊ฒ์ด๋ฏ๋ก ์์๋ฅผ ๋ฐ๊พธ์ง ์๊ณ , ์์์ด๋ฉด ์์๋ฅผ ๋ฐ๊ฟ๋๋ค. ์ด ์ฐจ์ด ๊ฐ์ ํตํด ์ด๋ป๊ฒ ์ ๋ ฌ๋ ์ง๊ฐ ์ ํด์ง๋๋ค.
์ฐธ๊ณ ๋ก, ์ฌ๊ธฐ์ ์ฐ์ธ ๋๋ค ํจ์๋ compare ๋ฉ์๋๋ฅผ ๊ฐ๋จํ๊ฒ ํํํ ๋ฐฉ์์ ๋๋ค.
์์ ์๋ sort ๋ฉ์๋์ ์ ์๋ฅผ ์ฐธ๊ณ ํ๋ฉด, Comparator<? super T> c ์ด ์์น์ ๋๋ค ํจ์๊ฐ ๋ค์ด๊ฐ๋๋ค.
์ด๋ ๊ฒ ํจ์ํ ์ธํฐํ์ด์ค ํ ๋ณ์์ ๋๋ค ํจ์๋ฅผ ๋ฃ์ผ๋ฉด ๊ทธ ๋๋ค ํจ์๊ฐ ํด๋น ํจ์ํ ์ธํฐํ์ด์ค์ ์ ์ผํ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์๋ฐ์์ ์ง์ํด์ฃผ๋ ๊ธฐ๋ฅ์ด์ง์! ๋น๊ต๋ฅผ ์ํ ์ฝ๋๋ฅผ ์ฒจ๋ถํ๊ฒ ์ต๋๋ค.
์๋ฐ 8 ์ด์ ์๋ ์ต๋ช ํด๋์ค ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค.
// ์ต๋ช
ํด๋์ค ๋ฐฉ์
Comparator<int[]> comparator = new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
};
// ๋๋ค ํํ์ ๋ฐฉ์
Comparator<int[]> comparator = (o1, o2) -> o1[0] - o2[0];
์ถ๊ฐ์ ์ธ ์ฐ์ต์ด ํ์ํ๋ค๋ฉด ๋ค์ ์ฌ์ดํธ๋ฅผ ํ์ฉํด๋ด๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
https://www.w3schools.com/java/java_advanced_sorting.asp
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'๐ป Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (0) | 2024.11.02 |
---|---|
์ด์งํ์ ์๊ณ ๋ฆฌ์ฆ (0) | 2022.10.10 |