가장 먼저 떠오른 방법은 앞에 가장 큰 수가 와야하기 때문에
1의 자리, 10의 자리, 100의 자리별로 분류하고 내림차순 정렬을 한 후에숫자들을 조합하려고 했는데 이렇게 하면 9 95 999 이렇게 나올 때 뭘 먼저해야할지 판단이 제대로 안된다. => 기각
숫자들로 만들 수 있는 모든 경우를 찾아내면서 Math.max()를 이용해 최종적으로 큰 값을 찾으려고 했다.
이 경우는 그냥 뭔가 아닌 것 같았다. 애초에 숫자들을 int형으로 주었고, dfs형식으로 숫자들을 조합하려고 했는데 dfs안에 depth ==maxLen일 대 str형태의 숫자를 다시 int형으로 변경 후 Math.max()를 해야하고 하니까 이렇게까지 할 문제는 아니라고 생각이 들었다.
결국 또 서칭의 도움을 받았다..고민할만큼 고민을 했으니 괜찮은건가 싶긴하다. 내가 생각치도 못한 방법으로 풀이들을 하셨는데 난 정말 아직 엄청 부족하다!!
Comparator
이게 핵심이었다. 코드도 내 생각보다 엄청 짧았고, Comparator를 이용하면 엄청 쉽게 해결이 가능했다.
내가 궁금했던 건 Comparator를 사용하더라도 50 501 이런 길이가 다른 것들을 어떻게 비교하나 싶었는데..

문자열을 비교할 때의 compareTo는 사전 순으로 비교를 한다고 한다.
사전순으로 비교를 하면 길이가 다를 때 만약 작은 길이만큼 비교했을 때 같다면 길이가 짧은 것을 반환한다!
Comparator에 대한 내용은 이 전에 블로그에 정리했지만 다시 복습하는 느낌으로!
일단 Comparator는 인터페이스로서 우리가 실제로 사용하기 위해서는 compareTo부분을 구현해야한다. 즉 실제로 비교하는 부분은 우리가 만들어줘야 한다는 의미이고
여기서는 내림차순이니까 a1+a2를 기준으로 하는 것이 아닌 a2+a1을 기준으로 함수를 완성한다!
Arrays.sort(strArr, (a1, a2) -> (a2+a1).compareTo(a1+a2));
라는 생각이 들었는데 이를 이해하기 위해서는 문제 자체를 이해해야한다.
문제에서 원하는 건 결국 문제들을 이어 붙였을 때에 최대값이고 우리는 이어붙였을 경우 최대가 나오는 걸 캐치해야함으로 단순 a2,a1비교가 아닌 이어붙인 a2+a1, a1+a2를 비교한다.