1. 문제 설명
2. 나의 풀이
import java.util.Arrays;
class Solution {
public long solution(long n) {
String nStr = n + "";
char[] chars = nStr.toCharArray();
int maxLength = chars.length;
StringBuilder tempAnswer = new StringBuilder();
Arrays.sort(chars);
for(int i = chars.length-1; i >= 0; i--)
{
tempAnswer.append(chars[i]);
}
return Long.parseLong(tempAnswer.toString());
}
}
1. 숫자를 자릿수대로 나눠서 배열에 넣는다.
2. 배열을 순서대로 정렬(Collection.reverseOrder() ) 하면 한번에 역순 정렬됨, 근데 기억 안나서 안썼다..)
3. for문 사용하여 역순으로 다시 Stringbuilder에 append (string에 += 로 붙이면 느림)
4. 반환
3. 다른 사람의 풀이
3-1. 나와 비슷하지만 더 나은 풀이
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());
}
}
스트링 빌더의 reverse를 쓰면 for문으로 다시 역순 정렬할 필요가 없다.
3-2. 정석대로 자릿수를 나누고, 크기를 비교하는 함수
// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
public class ReverseInt {
public int reverseInt(int n)
{
int total_reverse=0, ten=1, tmp_num=n, count=0;//return할 변수, ten은 10씩 곱할 변수, tmp_num은 전달된 n값 가지는 임시변수, n의 자리수 알아내는 count
int i=0;
while(tmp_num!=0)//tmp_num이 0이 아닐 때까지 반복
{
count++;//count갯수 증가
tmp_num=tmp_num/10;//다음 자리수를 알기 위해 10으로 나눈 값을 tmp_num에 저장
}
tmp_num=n;//다시 n값을 tmp_num에 저장
int arr[]=new int[count];//count크기만큼의 배열 생성
while(tmp_num!=0)//tmp_num이 0이 아닐 때까지 반복
{
arr[i]=tmp_num%10;
tmp_num=tmp_num/10;//10으로 나눈 나머지 값을 저장했으니 다음 자리수를 알기 위해 10으로 나눈 값을 tmp_num에 저장
i++;//인덱스 값 증가
}
//내림차순->큰수부터 작은수로 내려감
for(i=0; i<arr.length; i++)
for(int j=i+1; j<arr.length; j++)
if(arr[i]<arr[j])
{
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
for(i=arr.length-1; i>=0; i--)//맨 마지막 인덱스인 arr.length-1부터가 1의 자리 수이므로
{
total_reverse+=arr[i]*ten;//total_reverse에 arr[i]*ten한 값을 계속 더하기
ten=ten*10;//1의 자리 수부터 계산하였으므로 점차 올라가니까 10씩 곱해주기
}
return total_reverse;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args){
ReverseInt ri = new ReverseInt();
System.out.println(ri.reverseInt(118372));
}
}
'코테 > java' 카테고리의 다른 글
[프로그래머스][java] lv1 이상한 문자 만들기 (0) | 2025.01.10 |
---|---|
[프로그래머스][java] lv 1 부족한 금액 계산하기 (0) | 2025.01.09 |
[프로그래머스][java] lv 0 중복된 문자 제거 (0) | 2024.12.02 |
[프로그래머스][java] lv 0 문자열 정렬하기 (1) (0) | 2024.11.28 |
[프로그래머스][java] lv 0 주사위의 개수 (0) | 2024.11.27 |