풀이법
정수 long을 입력 받고 가장 큰 숫자부터 차례대로 내림차순 정렬한 후 출력한다.
long을 배열에 넣고 정렬하면 시간 초과가 날거 같아서 어떤 식으로 풀어야 하는지 고민하였다.
long n을 String 으로 바꾸어 배열에 넣는다.
배열을 내림차순으로 정렬한다.
StringBuilder를 사용하여 하나씩 추가한다. 그리고 다시 Long으로 형변환 후 출력한다
틀린 풀이
import java.util.*;
class Solution {
public long solution(long n) {
//% 와 / 를 이용해서
//n을 뒤에서부터 하나씩 자른 후 list에 추가
//n의 자리 수 뒤에서부터 줄여나가기
List<Integer> list = new ArrayList<>();
long answer = 0;
String str = "";
while(n!=0) {
//10으로 나눈 나머지를 구해서 list에 추가
list.add((int)n%10);
//뒤에서부터 하나씩 잘라서 n을 변경해주기
n = n / 10;
}
//list정렬하기
//내림차순 정렬임
list.sort(Comparator.reverseOrder());
//list에 있는 int들을 String 으로 변환하여
//str에 저장하기
for(int i=0; i<list.size(); i++) {
str += Integer.toString(list.get(i));
}
answer = Long.parseLong(str);
return answer;
}
}
테스트 케이스는 맞았지만 다른 테스트 케이스에서 런타임 에러가 발생하여 틀렸다.
n의 범위가 크기 때문에 while문을 돌면서 10으로 나눈 나머지와 10으로 나눈 n을 갱신해주는게 오래 걸린거 같다.
맞은 코드
import java.util.*;
class Solution {
public long solution(long n) {
//valueOf 메소드를 사용해서
//long을 String으로 변환하여 list에 추가한다
long answer = 0;
//n을 ""로 한 글자 씩 분리해서 arr 배열에 넣어준다
String [] arr = String.valueOf(n).split("");
//배열을 내림차순으로 정렬한다
Arrays.sort(arr, Collections.reverseOrder());
//시간을 줄이기 위해 StringBuilder를 사용한다
StringBuilder sb = new StringBuilder();
for(String str : arr) {
sb.append(str);
}
//출력 시에서는 long을 String으로 바꿔줘야 한다
return Long.parseLong(sb.toString());
}
}
풀이과정은 주석으로 달아놓았다.
메소드를 자유롭게 쓸 수 있는 능력을 길러야겠다.
'알고리즘 > Programmers' 카테고리의 다른 글
[프로그래머스] Java Level 1. 두 정수 사이의 합 (0) | 2023.05.25 |
---|---|
[프로그래머스] Java Level 1. 하샤드 수 (0) | 2023.05.25 |
[프로그래머스] Java Level 1. 정수 제곱근 판별 (0) | 2023.05.25 |
[프로그래머스] Java Level1. 문자열을 정수로 바꾸기 (0) | 2023.05.20 |
[프로그래머스] Java Level1. 자연수 뒤집어 배열로 만들기 (0) | 2023.05.20 |