https://programmers.co.kr/learn/courses/30/lessons/12933
코딩테스트 연습 - 정수 내림차순으로 배치하기
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조건 n은 1이
programmers.co.kr
이전에 비슷한 문제를 풀었을 때 다른 사람분의 풀이를 봤을 때 숫자의 위치를 바꿔야 할때 byte단위로 나눠서 풀었던 것이 생각나서 이렇게 풀었습니다.
package sortdescend;
public class SortDescend {
public static long solution(long n) {
String str = n+"";//문자열로 변환
byte[] bytes = str.getBytes();//문자열을 byte배열로 변환
byte temp;// 잠시 저장할 byte
for(int i=0; i<bytes.length;i++) {
for(int j=i+1;j<bytes.length;j++) {
if(bytes[i]<bytes[j]) {//뒤에 위치한 숫자가 더 크면 바꾼다.
temp = bytes[i];
bytes[i] = bytes[j];
bytes[j] = temp;
}
}
}
long answer = Long.parseLong(new String(bytes));//바이트배열을 문자열로바꾸고 long으로 바꾸기
return answer;
}
public static void main(String[] args) {
System.out.println(solution(118372));
}
}
이 문제는 중간 바뀐 문제였는지 제출된 코드중에 제대로 실행되는 것이 많지 않아서 그나마 잘 돌아간 코드를 갖고 왔습니다. 일단 시간이 제것보다 훨씬 빠른 것 같아서 볼만한 가치가 있어보였습니다.
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());
}
}
String.valueOf(오브젝트):오브젝트를 String으로 변환하고, 한글자씩 나눠서 배열에 넣는다.
Arrays.sort(배열)로 오름차순으로 정렬
enhanced for문으로 각 인덱스의 값을 StringBuilder에 추가(append)한다.
String을 직접 더하는 것보다 StringBuilder나 StringBuffer를 쓰는 것이 좋다고 합니다.
StringBuilder(동기화적용X), StringBuffer(동기화적용가능)
쓰레드라는 개념으로 인해 Vector/ArrrayList와 같이 같은 기능을 하나 동기화가능여부에 따라 다른 클래스를 쓰는 것 같습니다.
StringBuilder의 toString()으로 문자열로 변환.
Long.parseLong(문자열)로 Long으로 변환.
'개발 > 프로그래머스' 카테고리의 다른 글
정수 제곱근 판별 (0) | 2021.09.11 |
---|---|
제일 작은 수 제거하기 (0) | 2021.08.19 |
최대공약수, 최소공배수(유클리드호제법) (0) | 2021.08.19 |
하샤드 수 (0) | 2021.08.16 |
콜라츠 추측 (0) | 2021.08.16 |