[Java] 프로그래머스 Level2 가장 큰 수
2019. 3. 5. 17:05ㆍ알고리즘
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이 중 가장 큰 수는 6210 입니다.
0 또는 양의 정수가 담긴 배열 numbers 가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
numbers 의 길이는 1 이상 100,000 이하입니다.
numbers 의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers | return |
---|---|
[6, 10, 2] | 6210 |
[3, 30, 34, 5, 9] | 9534330 |
풀이
x
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
String answer = ""; // 리턴값 초기화
String[] str_numbers = new String[numbers.length]; // 파라미터 numbers 배열의 길이와 같은 string 배열을 생성
// int 배열인 numbers를 string배열인 str_numbers로 변환
for (int i = 0 ; i < numbers.length ; i++) {
str_numbers[i] = String.valueOf(numbers[i]);
}
// str_numbers를 Compare()에 정의된 방식으로 정렬
Arrays.sort(str_numbers, new Compare());
// 현재 str_numbers는 올림차순으로 정렬되어 있음
// 따라서 가장 마지막 인덱스의 값이 max값이고, 이것이 반환값의 가장 앞에 올 숫자임
// 반환값의 맨 앞 숫자가 0이면 answer=0
// 반환값의 맨 앞 숫자가 0이 아니면 내림차순으로(가장 큰 수부터) answer에 담음
if (str_numbers[str_numbers.length - 1].equals("0")) {
answer += "0";
} else {
for (int i = str_numbers.length - 1; i >= 0; i--) {
// Compare 클래스에서 올림차순 정렬을 했다면 아래 코드 사용
// for(int i = 0 ; i < str_numbers.length ; i++)
answer += str_numbers[i];
}
}
return answer;
}
}
// Comparator 인터페이스를 오버라이딩하여 정렬 방식을 재정의하기
class Compare implements Comparator<String> {
public int compare(String o1, String o2) {
return (o1 + o2).compareTo(o2 + o1);// 올림차순 정렬
// 내림차순 정렬은 아래와 같이 순서를 바꾸어주면 된다
// return (o2 + o1).compareTo(o1 + o2);
}
}
Comparator 인터페이스는 처음 구현해보았다. 이 인터페이스를 사용하여 푸는 것도 구글링을 통해 알아내었다.
이 정도 난이도만 되어도 눈과 손으로 디버깅하는 것이 헷갈려지고, 어려워서 5시간 정도 걸린 것 같다.
포기하지 않고 꾸준히 연습할 것이다.
'알고리즘' 카테고리의 다른 글
[Java] 프로그래머스 Level2 쇠막대기 (0) | 2019.03.10 |
---|---|
[Java] 프로그래머스 Level2 H-Index (0) | 2019.03.06 |
[Java] 프로그래머스 Level1 모의고사 (0) | 2019.03.05 |
[JavaScript] 프로그래머스 Level1 완주하지 못한 선수(풀이중) (0) | 2019.03.04 |
[JavaScript] 프로그래머스 Level1 자연수 뒤집어 배열로 만들기 (0) | 2019.03.04 |