알고리즘 스터디 - 4주차

이은지·2023년 11월 7일
0

정렬알고리즘 에 대해 공부하고, 알고리즘 스터디 4주차 과제로 프로그래머스 ‘가장 큰 수’ 문제를 풀이하였다.

코딩테스트 연습 - 가장 큰 수 | 프로그래머스 스쿨 (programmers.co.kr)

1. Java에서 Sort 사용하기

자바에서는 배열을 정렬할 때, 사용하는 정렬 알고리즘을 메서드로 제공한다.

배열 혹은 리스트로 구성된 원소들을 특정한 규칙에 따라, 오름차순 혹은 내림차순으로 정렬을 할 수 있으며, 기본값으로 오름차순 정렬을 한다.

Sort(Array)

  • java.util.Arrays 클래스에 static 메서드로 선언되어 있음
  • int, llong, short, double 등 JAVA의 primitive 타입들에 대한 정렬을 지원
  • Reference(참조) 타입의 배열 정렬도 지원
  • Arrays.sort(배열);
    오름차순으로 정렬하고 싶은 배열을 전달인자로 주면 전달인자로 받은 배열이 정렬
    문자열의 경우 아스키코드 순 (알파벳 순)으로 오름차순 정렬되며, 한글도 가나다 순으로 정렬됨

Sort(Array, Comparator)

오름차순 정렬이 아닌, 임의의 정렬기준을 적용하려면 Comparator를 구현한 클래스를 두번째 전달 인자로 주어 원하는 방식대로 정렬 가능

Comparator는 정렬을 하기 위한 여러가지 명세를 제공하는 인터페이스로

  1. 사용자는 이 인터페이스를 명세대로 직접 구현한 클래스를 만들 수 있음
  2. 이미 구현되어있는 구현체를 사용할 수 있음
  • 예시
    • Collections.reverseOrder(): 내림차순 정렬을 하도록 구현되어 있으며, 내부적으로 Comparator를 구현한 클래스를 리턴

2. 구현 코드

  • Array.sort 메서드를 이용해 정렬함
  • String 클래스 compareTo() 메서드를 이용하여, o1, o2 순서로 있을 때 ‘o2+o1’이 더 크다면 두 수의 자리를 바꿔줌
public static String solution(int[] numbers) {

        //숫자를 문자열로 변환
        String[] result = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            result[i] = String.valueOf(numbers[i]);
        }

        //정렬하기
        Arrays.sort(result, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return ((o2 + o1).compareTo(o1 + o2));
            }
        });

        // 데이터가 0만 있을 경우 하나의 0만 리턴
        if(result[0].equals("0")) {
            return "0";
        }

        String answer="";

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

        System.out.println(answer);
        return answer;

    }
profile
소통하는 개발자가 꿈입니다!

0개의 댓글