Java

[JAVA] ๊ธฐ๋ณธ ์ •๋ ฌ ๋Œ€์‹  ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ

๋ฒผ๋ฆฌ01 2023. 12. 12. 20:17

Comparator์™€ Comparable

์ •๋ ฌ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ โ‘ ๋Œ€์ƒ โ‘ก๊ธฐ์ค€  ๋‘๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. Arrays์™€ Collections ํด๋ž˜์Šค์˜ sort() ๋ฉ”์„œ๋“œ๋Š” ๋Œ€์ƒ๊ณผ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋ฐ˜ํ™˜๊ฐ’ ์—†์ด ๋‚ด๋ถ€์—์„œ ์ •๋ ฌํ•œ๋‹ค.

 

//    import java.util.Arrays

Integer[] intArr = {3, 6, 2, 1, 4, 5};
Arrays.sort(intArr);    //    intArr = [1, 2, 3, 4, 5, 6]

 

 

์ด๋•Œ ์ •๋ ฌ ๊ธฐ์ค€ ์—†์ด ๋Œ€์ƒ๋งŒ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ๊ฐ ํด๋ž˜์Šค์— ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋˜๋Š”๋ฐ, Arrays์™€ Collections๋Š” (์ˆซ์ž์™€ ์•ŒํŒŒ๋ฒณ์ฒ˜๋Ÿผ ์ˆœ์„œ๋กœ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ผ๋ฉด) ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉ๋œ ๊ฒƒ์€ Comparable์ด๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค์— ์žˆ๋Š” compare() ๋ฉ”์„œ๋“œ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค. Arrays์™€ Collections์€ ๋‘˜ ๋‹ค Comparable์˜ ๊ตฌํ˜„์ฒด์ด๋‹ค.

 

 

๋‹ค์Œ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ [Lv. 1][๋ฌธ์ž์—ด ๋‚ด ๋งˆ์Œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ] ๋ฌธ์ œ๋‹ค.

 

 

๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ž์—ด๋กœ ๊ตฌ์„ฑ๋œ ๋ฆฌ์ŠคํŠธ `strings`์™€, ์ •์ˆ˜ `n`์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ ๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค n๋ฒˆ์งธ ๊ธ€์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด `strings`๊ฐ€ `["sun", "bed", "car"]`์ด๊ณ  n์ด 1์ด๋ฉด ๊ฐ ๋‹จ์–ด์˜ ์ธ๋ฑ์Šค 1์˜ ๋ฌธ์ž `"u", "e", "a"`๋กœ `strings`๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

 

 

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = strings.clone();

        Arrays.sort(answer, new Comparator<String>() {
            public int compare(String str1, String str2) {
//                ๊ฐ™์œผ๋ฉด ๊ธฐ๋ณธ ์ •๋ ฌ
                if (str1.charAt(n) == str2.charAt(n)) {
                    return str1.compareTo(str2);
                }

//                n๋ฒˆ์งธ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ
                return str1.charAt(n) - str2.charAt(n);
            }
        });

        return answer;
    }
}

 

 

 

Array.sort()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๋Œ€์ƒ์ธ answer์„ ์ „๋‹ฌํ•˜๊ณ , n๋ฒˆ์งธ ๋ฌธ์ž๋กœ ์ •๋ ฌํ•˜๋Š” ๊ธฐ์ค€์„ ์ƒˆ๋กœ ์ •์˜ํ•˜์—ฌ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด compare() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ–ˆ๋‹ค. ์–ด์ฐจํ”ผ ์ธ์ž๋กœ ์“ฐ์ด๊ณ  ๋ฒ„๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜ ์„ ์–ธ ์—†์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ ๋žŒ๋‹ค์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

Arrays.sort(answer2, (String str1, String str2) -> {
//          ๊ฐ™์œผ๋ฉด ๊ธฐ๋ณธ ์ •๋ ฌ
            if (str1.charAt(n) == str2.charAt(n)) {
                return str1.compareTo(str2);
            }

//          n๋ฒˆ์งธ ์ธ๋ฑ์Šค๋กœ ์ •๋ ฌ
            return str1.charAt(n) - str2.charAt(n);
        }
    );