문자열 내 마음대로 정렬하기 - JAVA

bw1611·2023년 8월 16일
0

알고리즘

목록 보기
2/3
class Solution {
    public String[] solution(String[] strings, int n) {
        String[] answer = new String[strings.length];

        Arrays.sort(strings);

        for (int i = 0; i < strings.length; i++){
            String temp = "";
            for (int j = 0; j < strings.length; j++){
                if (strings[i].charAt(n) < strings[j].charAt(n)){
                    temp = strings[i];
                    strings[i] = strings[j];
                    strings[j] = temp;
                }

                if (strings[i].charAt(n) == strings[j].charAt(n)){
                    if (strings[i].compareTo(strings[j]) < 0) {
                        temp = strings[i];
                        strings[i] = strings[j];
                        strings[j] = temp;
                    }
                }
            }
        }

        for (int i = 0; i < strings.length; i++){
            answer[i] = strings[i];
        }


        return answer;
    }
}
  • Arrays.sort(strings)를 이용해서 우선 정렬해줍니다. ["abcd","abce","cdx"]
  • 이중 for문을 순회하면서 strings[i].charAt(n) 보다 strings[j].chatAt(n)이 클 경우 temp변수를 통해 strings[i]와 strings[j]의 위치를 바까준다.
  • chatAt()
    String으로 저장된 문자열 중에서 한 글자만 선택해 char타입으로 변환해주는 메서드
  • 만약에 n의 인덱스의 위치의 숫자가 같다면 compareTo를 통하여 strings[i]와 strings[j]의 첫번째 인덱스부터 비교합니다. 만약에 strings[i]가 strings[j]보다 사전순으로 정렬합니다. 즉 0보다 작은 마이너스의 숫자라면 둘의 위치를 바까줍니다.

  • abce 와 abcd는 n번째가 2라고 한다면 동일한 b로 값이 같아집니다. 첫번째 인덱스부터 "a,b,c"로 똑같아 마지막 인덱스인 d와 e를 비교합니다. 'd'는 아스키 코드로 100, 'e'는 101 입니다. 그러므로 -1의 값이 나옵니다.

    • compareTo()
      String str = "abce";
      System.out.println(str.compareTo("abcd));
      e = 101, d = 100 이므로 1을 리턴
profile
Java BackEnd Developer

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

개발자로서 배울 점이 많은 글이었습니다. 감사합니다.

답글 달기