✔ 가장 큰 수
문제 분석하기
숫자의 앞자리가 가장 큰 숫자가 앞으로 와야 큰 수를 만들 수 있으므로 숫자를 문자로 변경한 후 앞뒤로 붙여가며 더 큰 순서대로 정렬
예) [6, 10, 2]
610 > 106 (6과 10)
62 > 26 (6과 2)
102 < 201 (10과 2)
정렬한 후 : [6, 2, 10]이므로 6210
손으로 풀어보기
- 정수 배열을 문자열 배열로 변경
- 앞뒤로 이어붙여 가며 가장 큰 순서대로 정렬
- 배열의 가장 앞이 0인지 확인
- 0이라면 0 반환
- 배열의 가장 앞이 0이 아니라면 배열 내 숫자들 이어 붙이기
- 가장 큰 수 반환
슈도코드 작성하기
numbers(0 또는 양의 정수가 담긴 배열)
arr(numbers를 담을 문자열 배열)
arr에 numbers 저장
arr을 앞뒤로 붙여가며 더 큰 순서대로 정렬하도록 커스텀
if(arr의 첫 번째가 0이라면) {
0 반환
}
arr을 합쳐서 반환
코드 구현하기
/**
* 42746) 가장_큰_수
*/
public class K002_42746 {
// numbers(0 또는 양의 정수가 담긴 배열)
public String solution(int[] numbers) {
// arr(numbers를 담을 문자열 배열)
String[] arr = new String[numbers.length];
// arr에 numbers 저장
for (int i = 0; i < arr.length; i++) {
arr[i] = String.valueOf(numbers[i]);
}
// arr을 앞뒤로 붙여가며 더 큰 순서대로 정렬하도록 커스텀
// Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
// arr의 첫 번째가 0이라면
if (arr[0].equals("0")) {
// 0 반환
return "0";
}
// arr을 합쳐서 반환
StringBuilder answer = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
answer.append(arr[i]);
}
return answer.toString();
}
public static void main(String[] args) {
K002_42746 solution = new K002_42746();
int[] numbers = { 6, 10, 2 };
String result = solution.solution(numbers);
System.out.println(result);
}
}
'Coding Test > 알고리즘 실전' 카테고리의 다른 글
[42860] 조이스틱 (0) | 2023.11.06 |
---|---|
[42940] 모의고사 (0) | 2023.11.06 |
[42627] 디스크 컨트롤러 (0) | 2023.11.05 |
[12909] 올바른 괄호 (0) | 2023.11.04 |
[42576] 완주하지 못한 선수 (0) | 2023.11.03 |