TIL Java
내일배움캠프 57일차 TIL _ 12주 4일차
mad038
2024. 7. 8. 15:56
- 오늘 있었던 일
- 스프링 공부
- 알고리즘
알고리즘 문제 풀기
● 가장 큰 수
더보기
● 가장 큰 수 //링크
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
String[] strNumbers = Arrays.stream(numbers)
.mapToObj(String::valueOf)
.toArray(String[]::new);
Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));
if (strNumbers[0].equals("0")) {
return "0";
}
StringBuilder answer = new StringBuilder();
for (String str : strNumbers) {
answer.append(str);
}
return answer.toString();
}
}
-
- 2번만에 통과했다.
- 문제 지문에
- numbers의 원소는 0 이상 1,000 이하입니다.
- 0만 주루륵 나올줄은 몰랐다.
- Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));를 이용해
- 정렬 과정은 배열이 [3, 30, 34, 5, 9]인 경우:
- 각 요소를 문자열로 변환: ["3", "30", "34", "5", "9"]
- 정렬:
- "9" + "5" ("95")와 "5" + "9" ("59")를 비교하여 "95"가 앞에 옵니다.
- "5" + "34" ("534")와 "34" + "5" ("345")를 비교하여 "534"가 앞에 옵니다.
- 이와 같은 방식으로 나머지 요소들을 비교하여 정렬합니다.
- 결과: ["9", "5", "34", "3", "30"]
- 밑은 다른 사람의 풀이
-
mport java.util.ArrayList; import java.util.Collections; import java.util.List; class Solution { public String solution(int[] numbers) { String answer = ""; List<Integer> list = new ArrayList<>(); for(int i = 0; i < numbers.length; i++) { list.add(numbers[i]); } Collections.sort(list, (a, b) -> { String as = String.valueOf(a), bs = String.valueOf(b); return -Integer.compare(Integer.parseInt(as + bs), Integer.parseInt(bs + as)); }); StringBuilder sb = new StringBuilder(); for(Integer i : list) { sb.append(i); } answer = sb.toString(); if(answer.charAt(0) == '0') { return "0"; }else { return answer; } } }
- 엄청 깔끔하네 나는 함수만 쓴거고 이 사람 처럼 로직을 짰어야 했는데
당일 회고
- 컴퓨터 하드가 맛이가서 작성해둔 TIL을 못올렸다.
복구데이터가 이제야 올 줄은 몰랐다.