프로그래머스 가장 큰 수 문제입니다.
https://programmers.co.kr/learn/courses/30/lessons/42746
처음에는 쉽게 접근할 수 있을줄 알았는데 생각보다 어려웠습니다.
알고리즘을 따로 준비해본 경험도 없고, 이전까지 알고리즘은 파이썬으로 풀었기 때문인지는 모르겠지만
이 문제를 풀면서 자바에 대한 기본기가 많이 부족하다고 느꼈습니다.
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
String[] str_number = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
str_number[i] = String.valueOf(numbers[i]);
}
Arrays.sort(str_number, new Comparator<String>(){
@Override
public int compare(String num, String num2) {
return (num2+num).compareTo(num+num2);
}
});
if(str_number[0].equals("0")){
return "0";
}
for(int i=0; i<numbers.length; i++){
answer += str_number[i];
}
return answer;
}
}
자바에서는 정렬기준을 Comparator라는 익명 클래스를 사용하면 손 쉽게 변경할 수 있습니다.
문제풀이를 문자열을 내림차순으로 정렬하면 되는 것이라고 쉽게 생각하면 함정에 빠지게 됩니다.
문제의 입출력 예에서 보면 3, 30가 있는데 303보다 330이 크지만 내림차순으로 정렬하게 될 경우 30, 3으로 정렬이 됩니다.
이러한 문자열을 그냥 더하게 되면 당연히 오답이 나오게 되므로 이러한 예외에 대한 처리를 해줘야 합니다.
이 풀이에서는 두 문자열을 더해서 330, 303을 비교한 후에 내림차순으로 정렬하면서 문제를 해결했습니다.
'알고리즘' 카테고리의 다른 글
프로그래머스 - 스킬트리(틀림) (1) | 2020.03.19 |
---|---|
프로그래머스(Level 2) - 더 맵게 (1) | 2020.03.15 |
프로그래머스 - 다리를 지나는 트럭 (2) | 2020.03.14 |
프로그래머스 - 주식가격 (0) | 2020.03.08 |
백준 1260번 - DFS와 BFS (2) | 2020.03.08 |