Algorithm/Java

프로그래머스 - 정수 내림차순으로 배치하기 java

고고마코드 2021. 12. 27. 21:56
반응형

문제 링크 - 12933번

코딩테스트 연습 - 정수 내림차순으로 배치하기 | 프로그래머스 (programmers.co.kr)


문제 이해하기

  • 선택정렬 내림차순
    • {5, 7, 1, 3}
      5, 7 비교 : 5 < 7 이므로 자리 교체 {7, 5, 1, 3}
      7, 1 비교 : 7 > 1 이므로 그대로 {7, 5, 1, 3}
      7, 3 비교 : 7 > 3 이므로 그대로 {7, 5, 1, 3}
    • {7, 5, 1, 3}
      5, 1 비교 : 5 > 1 이므로 그대로 {7, 5, 1, 3}
      5, 3 비교 : 5 > 3 이므로 그대로 {7, 5, 1, 3}
    • {7, 5, 1, 3}
      1, 3 비교 : 1 < 3 이므로 자리 교체 {7, 5, 3, 1}
    • {7, 5, 3, 1}

문제 풀이

1번 풀이

public long solution(long n) {
    char[] sort = String.valueOf(n).toCharArray();
    int tmp = 0;
    for(int i=0; i<sort.length; i++) {
        for(int j=i+1; j<sort.length; j++) {
            if(sort[i] < sort[j]) {
                tmp = sort[i];
                sort[i] = sort[j];
                sort[j] = (char) tmp;
            }
        }
    }

    return Long.parseLong(String.valueOf(sort));
}

전형적인 선택정렬 알고리즘

2번 풀이

public long solution(long n) {
    String[] nArr = String.valueOf(n).split("");
    Arrays.sort(nArr);

    StringBuilder sb = new StringBuilder();
    for (int i = nArr.length - 1; i >= 0; i--) sb.append(nArr[i]);

    return Long.parseLong(sb.toString());
}

배열을 정렬해주는 정렬 메소드 Arrays.sort() 를 사용

정렬된 배열을 역순으로 가져오면 된다.

Collections.reverseOrder() 를 사용하면 바로 내림차순 정렬이 가능하다.

3번 풀이

public long solution(long n) {
    StringBuilder sb = new StringBuilder();
    String.valueOf(n).chars()
        .mapToObj(ch -> (char) ch)
        .sorted(Comparator.reverseOrder())
        .forEach(ch -> sb.append(ch));

    return Long.parseLong(sb.toString());
}

스트림 & 람다식 풀이

  • chars() 메소드로 StringIntStream 으로 가져온다.

  • IntChar 형식으로 변환한다.

  • 내림차순 정렬한다.

  • StringBuilder 에 담은 후 Long 타입으로 변환하여 반환한다.


반응형