원하는 것은 뭐든지

99클럽 코테 스터디 3일차 TIL , 문자열 내 마음대로 정렬하기 본문

개발/문제풀이

99클럽 코테 스터디 3일차 TIL , 문자열 내 마음대로 정렬하기

댕로그😏 2024. 7. 24. 14:00
반응형

문제

풀이

정렬은 간단하게 풀이가 가능한데 여기서는 주어진 문자열에 n에 해당하는 인덱스를 기준으로 정렬하는 문제다.

Arrays.sort를 사용하고 Comparator를 사용해 비교방법을 재정의 해주면 된다.

 

제출 1  - 정답

import java.util.*;
class Solution {
    public String[] solution(String[] strings, int n) {
        
        Arrays.sort(strings, new Comparator<String>(){
           public int compare(String s1, String s2){
               char c1 = s1.charAt(n);
               char c2 = s2.charAt(n);
               if(c1 == c2){	//n인덱스의 값이 같을 경우 사전순으로
                   return s1.compareTo(s2);
               }else if(c1 < c2){
                   return -1;
               }else{
                   return 1;
               }
           } 
        });
        
        return strings;
    }
}

 

n인덱스의 값이 같다면 본래 s1, s2의 사전순으로 정렬한다.

 

제출 2 - 정답

import java.util.*;
class Solution {
    public String[] solution(String[] strings, int n) {

        Arrays.sort(strings, new Comparator<String>(){
           public int compare(String s1, String s2){
               char c1 = s1.charAt(n);
               char c2 = s2.charAt(n);
               if(c1 == c2){
                   return s1.compareTo(s2);
               }else {
                   return Character.compare(c1,c2);
               }
           }
        });
        
        return strings;
    }
}

 

Character.compare로 줄여 조건문의 사용을 줄이고 명확하게 표현

 

s1.compareTo(s2)

String 클래스의 compareTo는 String이 구현하는 Comparable 인터페이스 중 하나다.

String 객체를 사전순으로 정렬할 때 사용 된다.

문자열의 유니코드를 기반으로 비교하고 정수를 반환한다.

String.compareTo 예제

public class CompareToExample {
    public static void main(String[] args) {
        String str1 = "apple";
        String str2 = "banana";
        String str3 = "apple";

        int result1 = str1.compareTo(str2); // 음 (str1 < str2)
        int result2 = str1.compareTo(str3); // 0 (str1 == str3)
        int result3 = str2.compareTo(str1); // 양 (str2 > str1)

        System.out.println("Result1: " + result1); // -1
        System.out.println("Result2: " + result2); // 0
        System.out.println("Result3: " + result3); // 1
    }
}

Character.compare(c1,c2)

두 개의 character값을 비교하는 메서드이다.

두 값을 비교해서 정수를 반환한다.

Character.compare 예제

public class CharacterCompareExample {
    public static void main(String[] args) {
        char c1 = 'a';
        char c2 = 'b';
        char c3 = 'a';

        int result1 = Character.compare(c1, c2); // 음 (c1 < c2)
        int result2 = Character.compare(c1, c3); // 0 (c1 == c3)
        int result3 = Character.compare(c2, c1); // 양 (c2 > c1)

        System.out.println("Result1: " + result1); // -1
        System.out.println("Result2: " + result2); // 0
        System.out.println("Result3: " + result3); // 1
    }
}

 

TIL

  • Comparator의 사용방법을 다시 한번 익혔다.
  • String과 Character의 compare 동작을 익혔다.

 

반응형
Comments