새소식

반응형
250x250
Programmers/Lv.1

Char 순서대로 나열하기

  • -
728x90
반응형

 

내가 풀어보려 했던 방식은 반복문을 돌며 char를 뽑아내어

제일 처음에 와야하는 단어를 맨 앞자리에 위치시키는 것이었다.

 

선택정렬을 사용해보려고 했달까..?

 

근데 막상 해보니 char가 같을 때에 사전 순으로 배열을 하라는 것을 

해결을 어떻게 해야하나 감이 오지 않았고 계속 고민을 하다 결국 인터넷의 힘을 빌려봤다.

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = {};
        
        for(int i = 0; i < strings.length; i++) {
            int min = 999;
            int index = 0;
            for(int j = i; j < strings.length; j++) {
                char now = strings[j].charAt(n);
                if(min > (int) now) {
                    min = (int) now;
                    index = j;
                } else if(min == (int) now) {
                    for(int k = 0; k < strings[j].length(); k++) {
                        if(strings[index].charAt(k) - strings[j].charAt(k) > 0) {
                            min = (int) now;
                            index = j;
                        };
                    }
                }
                String temp = strings[index];
                strings[index] = strings[i];
                strings[i] = temp;
            }
        }
        
        return strings;
    }
}

 

...? 내가 위 코드처럼 길게길게 쓰면서 풀이했던 것이 매우 짧은 코드로 돌아왔다.

 

class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = {};
        
        Arrays.sort(strings, (a, b) -> {
            char charA = a.charAt(n);
            char charB = b.charAt(n);
            
            if(charA == charB) {
                return a.compareTo(b);
            } else {
                return Character.compare(charA, charB);
            }
        });
        
        return strings;
    }
}

 

...

Arrays.sort를 이렇게도 사용할 수 있는 것을 처음 알았다.

 

Arrays.sort로 strings를 받은 뒤 Comparator를 람다식으로 표현한 것 같다.

 

먼저 char를 선택해준 뒤 char가 같을 때에는 

 

순서를 compareTo 메소드로 비교를 해주고

 

만약 char가 다를 때에는 Character 클래스의 compare 메소드를 이용하여 정렬을 해준다.

 

이렇게 쉽게 해결할 수 있다니... 아직 더 많이 경험을 해봐야 할 것 같다.

 

Arrays.sort를 저런 방식을 활용할 수 있다는 점.

Comparator를 람다식으로 구현할 수 있다는 점.

Character 클래스에 compare 메소드를 사용하는 점.

 

위 세 가지를 기억해두면 좋을 것 같다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.