TIL_250402

듀듀·2025년 4월 2일

spring_TIL

목록 보기
33/53

가장 큰 수

링크텍스트

문제 설명

  1. numbers의 수를 String형으로 변환한 상태에서 이어 붙일 때, 가장 큰 수가 나오게 해야 한다.

[3, 30, 34, 5, 9] 정렬 -> [9, 5, 34, 3, 30] -> "9534330"

풀이 및 시행착오

틀린 풀이

우선 3이랑 30 같은 경우를 어떻게 처리해야 할지 난감했다.
그러다 "아! 2개씩 붙여서 수를 만들어서 정렬할까?" 라 생각함

  1. int형은 더하면 숫자가 더해지므로 이어 붙이기 위해 Str형으로 변환
  2. 두 수를 붙이고 비교하였을 때, 큰 수가 앞으로 오도록 배치 (내림차순)
  3. for문을 이용하여 answer에 추가

틀린 코드

//두 수를 붙인 후 비교 -> 정렬
import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        
        String[] arr = new String[numbers.length];
        
        //numbers를 string으로 변환
        for(int i=0; i<numbers.length; i++) {
            arr[i] = Integer.toString(numbers[i]);
        }
        
        //두 수를 붙이고 비교하였을 때, 큰 수를 앞으로 오도록 배치
        Arrays.sort(arr, (o1,o2) -> ((o2+o1).compareTo(o1+o2)));
        
        for(String s:arr) {
            answer += s;
        }
        
        return answer;
    }
}

잠깐 하나 왜 통과 못하는데? 93.3 뭔데;;

numbers의 수가 모두 0일때는 "0"을 반환하면 되므로 이러한 조건 추가
-> 효율성 up!


정답 풀이

  1. int형은 더하면 숫자가 더해지므로 이어 붙이기 위해 Str형으로 변환
  2. 두 수를 붙이고 비교하였을 때, 큰 수가 앞으로 오도록 배치 (내림차순)
  3. 효율성을 높이기 위해 모든 숫자가 0일 때는 0을 반환하는 조건 추가
  4. for문을 이용하여 answer에 추가

정답 코드

//두 수를 붙인 후 비교 -> 정렬
import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        
        String[] arr = new String[numbers.length];
        
        //numbers를 string으로 변환
        for(int i=0; i<numbers.length; i++) {
            arr[i] = Integer.toString(numbers[i]);
        }
        
        //두 수를 붙이고 비교하였을 때, 큰 수를 앞으로 오도록 배치
        Arrays.sort(arr, (o1,o2) -> ((o2+o1).compareTo(o1+o2)));
        
        //효율성을 높이기 위해 0일때 처리
        //정렬 후 첫번째 수가 0일 때 (= 모든 수가 0일 때) 0으로 처리
        if(arr[0].equals("0")) {
            return "0";
        }
        
        for(String s:arr) {
            answer += s;
        }
        
        return answer;
    }
}

정렬하는 방법 까먹었었다 미취겠네

0개의 댓글