반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/42746
설명
처음에 순열을 구해서 모든 수를 구한 뒤에 최대 값을 구하면 되지 않을까라고 생각했다.
하지만 순열은 모든 수의 조합을 구하다보니 너무 커서 그런가 런타임 에러가 났다...ㅠㅠ
구글에 검색한 결과 역시 문제의 분류가 정렬이다보니 정렬로 풀면 쉽게 끝나는 문제였다..!
하지만 일반 정렬이 아니라 각 숫자들을 합친 문자열로 비교를 해야 한다.
3과 30이 주어진 경우 330이 큰지 303이 큰지를 비교해서 정렬해야 한다.
Comparator를 재정의해 두 숫자를 합친 값을 비교해 정렬하면 된다.
0, 0, 0, 0과 같이 0이 나오는 케이스의 경우 예외처리를 해줘야 한다.
0000이 아닌 0으로 출력할 수 있도록
전체 코드
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] num = new String[numbers.length];
for(int i = 0; i < numbers.length; i++) {
num[i] = String.valueOf(numbers[i]);
}
Arrays.sort(num, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
String answer = "";
for(int i = 0; i < num.length; i++) {
answer += num[i];
}
if(answer.charAt(0) == '0') { // 0000 같은 경우 예외 처리
return "0";
}
return answer;
}
}
GITHUB
https://github.com/KwonMinha/Programmers/blob/master/Level2/src/MaximumNumber.java
반응형
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - Java] 주식 가격 (0) | 2021.06.10 |
---|---|
[프로그래머스 - Java] 다리를 지나는 트럭 (3) | 2021.06.10 |
[프로그래머스 - Java] N진수 게임 (2018 KAKAO BLIND RECRUITMENT) (0) | 2021.05.08 |
[프로그래머스 - Java] 징검다리 건너기 (2019 카카오 개발자 겨울 인턴십) (1) | 2021.02.06 |
[프로그래머스 - Java] 경주로 건설 (2020 카카오 인턴십) (0) | 2021.01.31 |
댓글