자바칩
[프로그래머스 / Java] 코딩테스트 연습: 가장 큰 수 (정렬) 본문
난이도: Level 2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42746
이 문제는 숫자 배열을 모두 문자열 배열로 바꿔주고
Arrays.sort(문자열 배열 이름, Comparator 익명 클래스로 정렬 기준 세팅);
이것만 잘 해주면 된다.
int[] numbers = {3, 30, 34, 5, 9}
이 배열에서 얻을 수 있는 가장 큰 수는 9534330이다.
즉, 9, 5, 34, 3, 30으로 정렬을 해줘야 한다는 말이다.
9, 5는 정렬하는 기준을 쉽게 알겠는데 34, 3, 30는 어떻게 정렬을 해야할 지 감이 잘 안 올 것이다.
일단 문자열 배열을 선언해서 numbers 배열에 있는 정수들을 모두 문자열로 바꿔준다.
String[] strings = {"3", "30", "34", "5", "9"}
정렬을 하는 기준은 두 문자열을 이어붙인 값을 정수로 변환하고, 내림차순 정렬해주면 된다.
만약 두 문자열이 "34"와 "3"이라면
"34" + "3" = "343"
"3" + "34" = "334"
두 수중에 더 큰 값은 343이다.
만약 두 문자열이 "3"과 "30"이라면
"3" + "30" = "330"
"30" + "3" = "303"
두 수중에 더 큰 값은 330이다.
이것을 내림차순 정렬하는 방법은 다음과 같다.
b - a를 리턴하면 자동으로 내림차순 정렬이 되고, a - b를 리턴하면 자동으로 오름차순 정렬이 된다.
b - a 대신 Integer.compare(b, a)로 작성해도 같은 결과를 리턴한다.
정렬된 문자열 배열을 최종 리턴할 문자열 변수인 answer에 모두 이어붙여서 리턴하면 되는데, 그 전에 주의할 것이 있다.
만약 주어진 배열이 {0, 0, 0}일 때는 정렬된 배열의 결과도 {0, 0, 0}이 나오게 된다.
이 배열을 answer에 이어붙이면 "000"을 리턴해서 틀린 값이 된다.
정렬된 배열의 첫 번째 원소가 0이라면 곧바로 "0"을 리턴시키자.
전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import java.util.*;
class Solution {
public String solution(int[] numbers) {
StringBuilder answer = new StringBuilder();
// 정수를 문자열로 변환한 배열
String[] strings = new String[numbers.length];
// 정수를 문자열로 변환해서 저장
for (int i = 0; i < numbers.length; i++) {
strings[i] = String.valueOf(numbers[i]);
}
// 두 문자열의 합을 정수로 바꾼 값 중에
// 더 큰 값을 기준으로 내림차순 정렬
Arrays.sort(strings, new Comparator<>() {
public int compare(String s1, String s2) {
int a = Integer.parseInt(s1 + s2);
int b = Integer.parseInt(s2 + s1);
return b - a;
}
});
// 정렬한 문자열 배열의 첫 원소가 0이라면 곧바로 0 리턴
if (strings[0].equals("0")) {
return "0";
}
// 정렬한 문자열 배열의 원소들을 차례대로 이어붙이기
for (String string : strings) {
answer.append(string);
}
// 이어붙인 문자열 리턴
return answer.toString();
}
}
|
cs |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Java] 코딩테스트 연습: 디스크 컨트롤러 (힙) (0) | 2024.08.22 |
---|---|
[프로그래머스 / Java] 코딩테스트 연습: H-Index (정렬) (0) | 2024.08.11 |
[프로그래머스 / Java] 코딩테스트 연습: 베스트앨범 (해시) (0) | 2024.08.09 |
[프로그래머스 / Java] 코딩테스트 연습: 의상 (해시) (0) | 2024.08.08 |
[프로그래머스 / Java] PCCP 기출문제 2번: 석유 시추 (BFS) (0) | 2024.08.04 |