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]인 경우:
      1. 각 요소를 문자열로 변환: ["3", "30", "34", "5", "9"]
      2. 정렬:
        • "9" + "5" ("95")와 "5" + "9" ("59")를 비교하여 "95"가 앞에 옵니다.
        • "5" + "34" ("534")와 "34" + "5" ("345")를 비교하여 "534"가 앞에 옵니다.
        • 이와 같은 방식으로 나머지 요소들을 비교하여 정렬합니다.
      3. 결과: ["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을 못올렸다.
    복구데이터가 이제야 올 줄은 몰랐다.