
class Solution {
public long solution(long n) {
long answer = 0;
int s = 0;
long k = 1;
long init;
for (int i = 0; i < n; i++) {
if (n / k < 1)
break;
else {
k *= 10;
s++;
}
}
init = k;
long[] a = new long[s];
for (int i = 0; i < a.length; i++) {
k /= 10;
a[i] = n / k;
n = n - (k * a[i]);
}
long [] b = new long[s];
long l=0;
for (int i = 0; i < s; i++) {
l=0;//비교값을 0으로 초기화
for (int j = 0; j < s; j++) {
if (l <= a[j]) {//a배열을 순서대로 비교해서
l = a[j];//가장 큰 a[j]를 l에 넣기.
}
}
for(int j=0;j<a.length;j++){
if(l==a[j]) {//다시 재비교해서
a[j] = 0;//제일 큰 값은 0으로 바꿔 뒤 비교문에서 제외시키고
break;//중복 0을 방지하기 위해 바로 빠져나가기
}
}
b[i]=l;//가장 큰 값 b배열에 차례대로 넣기
}
for (int i = 0; i < b.length; i++) {
init /= 10;
answer += b[i] * init;//배열에 맞춰 높은 자릿수 순서대로 10씩 나눠서 더해 answer long타입에 더하기.
}
return answer;
}
}
public class ReverseInt {
String res = "";
public int reverseInt(int n){
res = "";
Integer.toString(n).chars().sorted().forEach(c -> res = Character.valueOf((char)c) + res);
return Integer.parseInt(res);
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args){
ReverseInt ri = new ReverseInt();
System.out.println(ri.reverseInt(118372));
}
}
stream문 사용. 아직 공부 더 필요.
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());
}
}``````
코드해석:long형 n을 문자열로 변환해 오름차순으로 저장.
stringbuilder를 불러 문자열을 옮긴후,
역방향으로 변환해 long형으로 다시 치환.
Arrays.sort(list): 문자열을 순서대로 정렬하는 메소드(기본적으로 오름차순)
stringBuilder: 문자형 String 과 비슷하지만 메모리 효율면에서 차이가 있다.
주로 코드에서 문자 변수에 수정 등 자주 접근할 일이 있을 때 사용.
아래 포스팅에 잘 정리되어 있음.
https://blog.naver.com/youngjeli/223673677741
Long.parseLong: 문자열을 long으로 바꿔주는 메소드
reverse( ) : 문자열을 거꾸로 나열하는 메소드
자바는 수학이 아니니, 어려운 문제를 보거든 간편한 메소드를 검색하는 것이 더 효율적이고 시간절약하기 좋다고 느낌.
조사한대로 간략하게 설명하자면,
프로그램에서 변수가 선언되어 메모리 할당할 때 이 명령어를 쓰면 메모리는 정적변수로 지정되어 변하지 않는다.
그래서 메인에서 이 명령어가 있는 클래스의 새로운 객체를 여러번 생성해도,
같은 주소를 공유하게 되므로 메모리 관리면에서 효율적인 것.
한 예로
a class{
int static num=0;
public static void main(String[] args){
a a1= new a();
a a2= new a();
a1.num++;
a2.num++;
이렇게 코드를 작성한다면 각 num은 1이 될거라 생각되지만
실제로는 같은 num을 공유하기 때문에
최종 num=2가 된다.