연습문제
🔥 정수 내림차순으로 배치하기 🔥
정수 n을 매개변수로 받고 n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주는 함수 solution을 완성해보자.
n은 1이상 8000000000 이하인 자연수
n | return |
---|---|
118372 | 873211 |
import java.util.Arrays;
import java.util.Collections;
class Solution {
public Long solution(long n) {
String a = String.valueOf(n); //long -> String
String [] b = a.split(""); // 배열형태로
Arrays.sort(b, Collections.reverseOrder()); //내림차순
Long answer = Long.parseLong(String.join("",b));
return answer;
}
}
형변환... 가장 기초이지만 매일 찾아보고 헷갈리는 부분이다.
java의 형변환에 대해 다시 한번 짚고 넘어가야겠다. 🤨
import java.util.*;
class Solution {
public long solution(long n) {
String[] list = String.valueOf(n).split("");
Arrays.sort(list);
StringBuilder sb = new StringBuilder();
for (String aList : list) sb.append(aList);
return Long.parseLong(sb.reverse().toString());
}
}
sort 메서드를 이용해서 내림차순이 아닌 오름차순으로 정렬을 했다.
StringBuilder를 이용해서 Stringdls aList에 값을 append해주었다. StringBuilder의 reverse메서드를 이용해서 문자전체를 뒤집고 형변환을 해서 return 해주는 풀이이다.
StringBuilder를 사용할 생각은 못했는데 sort메서드를 복잡하게 작성하지 않아도 되고 간단하게 reverse메서드를 사용하는것이 더 간단해 보이는 코드이다.
import java.util.*;
class Solution {
public long solution(long n) {
return Long.parseLong(String.valueOf(n).chars().mapToObj(ch -> (char) ch)
.sorted(Comparator.reverseOrder())
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString());
}
}
무엇이 더 좋은 코드인지는 알 수 없지만 위의 코드는 그냥 다 뜯어보면서 이해하고 싶었다.
String.valueOf(n)
- 나와 동일하게 n을 String으로 변환해주었다.
.chars().mapToObj(ch -> (char) ch)
- Stream을 이용해서 String의 문자
.sorted(Comparator.reverseOrder( )
- 배열을 정렬하는 방법으로 reverseOreder()를 사용하면 내림차순으로 정렬된다.
.collect(StringBuilder::new, StringBuilder :: appendCodePoint, StringBuilder :: append .toString()
- IntStream을 문자열로 변환
자바의 Stream API와 람다에 대한 부분이 많이 부족하다는 것을 느꼈다. 자바에서 배열을 정렬하는 방법도 여러가지가 있었는데 이번 문제를 계기로 자바에 대해 더 공부해봐야할 듯 하다.
부족해...