코딩테스트 - 정수 내림차순으로 배치하기 (프로그래머스)
코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
문제 정보
- 프로그래머스
- 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를 돌면서 새로운 숫자와 기존 정답 배열에 담겨있는 숫자의 크기를 비교한다.
– 새로운 숫자가 기존의 숫자보다 크거나 같으면 새로운 숫자를 정답 배열의 해당 위치에 추가한다.
– 새로운 숫자가 기존의 숫자보다 작다면 다음 정답 배열 숫자와 비교한다.
– 새로운 숫자를 정답 배열의 마지막 숫자와 까지 비교를 했다면 새로운 숫자를 정답 배열의 가장 마지막에 넣는다.
댓글 남기기