본문 바로가기

프로그래머스 코딩(자바)/Level 1

Programmers Level 1 - 정수 내림차순으로 배치하기

728x90

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
  • n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n return
118372 873211

 

1
2
3
4
5
6
7
8
9
import java.util.Arrays;
import java.util.Collections;
class Solution {
    public long solution(long n) {
        String[] ar = (n+"").split(""); // 문자열 배열
        Arrays.sort(ar, Collections.reverseOrder()); // 내림차순정렬
        return Long.parseLong(String.join("", ar)); // 배열을 합쳐 정수로 바꾸기;
    }
}
cs

 

 String을 split()을 이용하여 1글자씩 잘라 String 배열로 만든 다음

String 배열을 역순으로 정렬하고 

String.join()으로 다시 결합한 String으로 만들고

Long.parseLong()을 이용 long형으로 형변환 했습니다.

 

1
2
3
4
5
6
7
8
9
10
11
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
    public long solution(long n) {
       return Long.parseLong(new StringBuffer(Arrays.stream((n+"").split(""))
                                                    .sorted()
                                                    .collect(Collectors.joining())
                                             ).reverse().toString()
                            );
    }
}
cs

 

 문자열을 1글씩 잘라서 배열을 만들고 스트림으로 변환하여 정렬을 수행한후 다시 String으로 만들었습니다. 
Arrays.stream((n+"").split("")).sorted().collect(Collectors.joining())

String을 StringBuffer객체로 만들어 뒤집기를 수행 하고 다시 String으로 만듭니다.
new StringBuffer(Arrays.stream((n+"").split("")).sorted().collect(Collectors.joining())).reverse().toString()

String을 long형으로 형변환 합니다.
Long.parseLong(new StringBuffer(Arrays.stream((n+"").split("")).sorted().collect(Collectors.joining())).reverse().toString());

 

1
2
3
4
5
6
7
8
9
10
11
import java.util.Comparator;
import java.util.stream.Collectors;
class Solution {
    public long solution(long n) {
      return Long.parseLong((n+"").chars()
                                  .mapToObj(v->((char)v + ""))
                                  .sorted(Comparator.reverseOrder())
                                  .collect(Collectors.joining())
                            );
    }
}
cs

 

 문자열을 IntStream 만들고

 mapToObj()를 이용하여 Stream<String>으로 변환후

sorted(Comparator.reverseOrder())으로 내림차순으로 정렬한 후

collect(Collectors.joining()) 으로 String으로 만든 다음 

Long.parseLong()으로 형변환하면 됩니다.

프로그램에는 모범 답안이 없습니다. 여러가지 방법으로 해결해 보는것이 실력을 늘리는 방법입니다.

 

728x90