코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
문제 정보
- 프로그래머스
- Java
- level 1
- 점수 : 3
- 문제 링크
문제
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한사항
- n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n | return |
---|---|
118372 | 873211 |
풀이 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.ArrayList;
class Solution {
public long solution(long n) {
String s = Long.toString(n);
ArrayList<String> answerList = new ArrayList<String>();
for (String st : s.split("")){
if (answerList.size() == 0){
answerList.add(st);
}else{
for (int i=0; i <= answerList.size(); i++){
if (i == answerList.size()){
answerList.add(st);
break;
}else if (Long.valueOf(st) < Long.valueOf(answerList.get(i))){
continue;
}else if (Long.valueOf(st) >= Long.valueOf(answerList.get(i))){
answerList.add(i, st);
break;
}
}
}
}
long answer = Long.valueOf(String.join("", answerList));
return answer;
}
}
풀이 방식
– 정답을 담을 빈 ArrayList 배열을 만든다.
– 입력받은 String 타입의 숫자 배열을 split으로 나눠 리스트 형태로 바꾼다.
– 이 리스트를 1차 for 문을 돌리면서 숫자 하나 하나마다 배치될 위치를 찾는다.
– 가장 첫 숫자를 정답 ArrayList 배열 안에 넣는다.
– 안쪽에 for 문을 하나 더 둬서 정답 ArrayList를 돌면서 새로운 숫자와 기존 정답 배열에 담겨있는 숫자의 크기를 비교한다.
– 새로운 숫자가 기존의 숫자보다 크거나 같으면 새로운 숫자를 정답 배열의 해당 위치에 추가한다.
– 새로운 숫자가 기존의 숫자보다 작다면 다음 정답 배열 숫자와 비교한다.
– 새로운 숫자를 정답 배열의 마지막 숫자와 까지 비교를 했다면 새로운 숫자를 정답 배열의 가장 마지막에 넣는다.