ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정렬 정리
    백준/정렬 2022. 4. 17. 01:02

    1. 문자열 정렬

    => 만약 숫자를 문자로 받아서 정렬해보면?

     

    예를 들어서 20, 12222 를 문자열 String 으로 받아서 내림차순 정렬해보자

     

    		String a = Integer.toString(12222);
    		String b = Integer.toString(20);
    		
    		String input [] = new String[2];
    		input[0] = a;
    		input[1] = b;
    		
    		Arrays.sort(input, Collections.reverseOrder());
    		// 내림차순 정렬
    		
    		
    		System.out.println(input[0]);
    		System.out.println(input[1]);

     

    아래는 이클립스 실행 결과이다.

    즉, 숫자를 문자열 String 으로 입력받아서 내림차순 정렬하면,

    맨 앞 숫자가 큰 순서대로 정렬됨.

     

     

     

    2. compareTo 메서드 정렬

     

     

    A.compareTo(B)

     

    A: 기준값

    B: 비교대상

     

    1) 기준값 = 비교대상 

    결과 : 0 

     

    2) 기준값 < 비교대상

    결과 : -1

     

    3) 기준값 > 비교대상

    결과 : 1

     

    	
    		Integer a = 2;
    		Integer b = 3;
    		
    		System.out.println(a.compareTo(b));

     아래는 이클립스 실행 결과이다.

     

     

    참고 자료 : https://mine-it-record.tistory.com/133

     

     

     

     

     

    3. comparator 인터페이스의 compare 메서드 

    1) 리턴값이 음수 또는 0 => 두개의 객체를 정렬시킬 때 두 객체의 자리가 그대로 유지된다.

    2) 리턴값이 양수 => 두 객체의 자리가 변경된다.

     

     

     

    예를 들어서

    배열 input[0] =2, input[1]=3 을 가지고 정렬해보자.

    (compare 메서드에서는 int 형은 정렬이 안되기 때문에, Integer 형태로 저장한 다음 정렬시켜야 한다.)

     

    	
    	Integer input[] = new Integer[2];
    		
    	input[0] = 2;
    	input[1] = 3;
    		
            Arrays.sort(input,new Comparator<Integer>() {
                @Override
                public int compare(Integer a, Integer b) {
                   
                   // 1)
                	if(a>b) {
                		return 1;
                        
                    // 2)    
                	}else if(a<b) {
                		return -1;
                        
                    // 3)    
                	}return 0;
                }
            });
    		
            
            for(int i=0; i<2;i++) {
           System.out.println(input[i]);
    	}

     

     

     

     

    compare 메서드에서

    1) a>b 이면 1을 리턴하라고 했다. 즉 양수가 리턴되므로 두 객체의 자리가 변경된다.

    즉, a>b 상태라면 => 3,2 순서로 정렬되어 있다면

    => 2,3 순서로 정렬해라.

     

    2) a<b 이면 -1 을 리턴한다. 즉 음수가 리턴되기 때문에 두 객체의 자리가 유지된다.

    즉, a<b 상태라면 => 2,3 순서로 정렬되어 있는 것이고,

    => 2,3 순서 그대로 유지된다.

     

    3) 만약 a=b 라면, 0 리턴한다. 즉, 두 객체의 자리가 유지된다.

     

    input[0] =2, input[1] = 3, input[2] = 2 인 상태에서 만약 저 방법으로 정렬 시키면,

    2 2 3 순서대로 정렬됨을 알 수 있다.

     

    input[0] =2 와 input[1] = 3 은 위의 정렬 방법에 따라 이 순서가 맞지만,

    input[1] =3, input[2] = 2 는 위의 정렬 방법에 의해 순서가 바뀌게 되어서

    => input[0] = 2, input[1] = 2, input[2] =3 이 된다.

     

    이때, input[0] =2, input[1] =2 는 정렬조건에서 a==b 를 만족하기 때문에 

    이 순서가 유지된다.

     

     

    참고자료 :

    1) https://lookingfor.tistory.com/entry/%EC%9E%90%EB%B0%94-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90-%ED%95%A8%EC%88%98-compare-compareTo

     

    2) https://velog.io/@injoon2019/%EC%9E%90%EB%B0%94-Comparator%EC%99%80-Comparable

     

     

    '백준 > 정렬' 카테고리의 다른 글

    삽입 정렬  (0) 2022.06.27
    1422 숫자의 신  (0) 2022.04.17
    백준 8979 올림픽  (0) 2021.11.11
    5635 생일  (0) 2021.10.27
    2750 수 정렬하기  (0) 2021.10.18

    댓글

Designed by Tistory.