반응형
안녕들 하시죠 !
이번시간에는 프로그래머스 Level2에 있는 '가장 큰 수' (정렬) 문제를 풀어보겠습니다.
문제
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers | return |
[6, 10, 2] | 6210 |
[3, 30, 34, 5, 9] | 9534330 |
코드설명
- 숫자를 String 형으로 변환
1
2
3
4
5
6
7
|
// 숫자를 String 문자형으로 바꾸기 위해 strNumbers 라는 String형 배열 준비.
String[] strNumbers = new String[numbers.length];
// String형 배열 strNumbers에 valueOf 메소드를 사용해 숫자를 문자로 바꿔 저장.
for (int i = 0; i < numbers.length; i++) {
strNumbers[i] = String.valueOf(numbers[i]);
}
|
cs |
* valueOf() 메소드
인자에 들어있는 객체를 String 객체로 형 변환시켜주는 메소드.
1
2
3
4
|
String number = "1234567890";
String sNumbers = String.valueOf(number);
String tbool = String.valueOf(true);
String fbool = String.valueOf(false);
|
cs |
- Arrays API를 사용해 정렬
1
2
3
4
5
6
7
8
9
|
// 컬렉션 프레임워크 Arrays 클래스의 sort 메소드사용.
// Comparator 메서드를 사용해 객체간의 특정한 정렬을 한다.
// compare() 메서드를 오버라이딩해서 숫자간 비교.
Arrays.sort(strNumbers, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
|
cs |
- 예외 처리
1
2
3
4
|
// 맨 처음 문자가 0이면 0반환
if (strNumbers[0].equals("0")) {
return "0";
}
|
cs |
- 순차적으로 저장 후 return
1
2
3
4
5
6
|
// String strNumber에 순차적으로 저장해 answer로 return
String answer = "";
for (String strNumber : strNumbers) {
answer += strNumber;
}
return answer;
|
cs |
전체 코드
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
38
39
40
41
42
43
44
45
46
47
|
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
public String solution(int[] numbers) {
// 숫자를 String 문자형으로 바꾸기 위해 strNumbers 라는 String형 배열 준비.
String[] strNumbers = new String[numbers.length];
// String형 배열 strNumbers에 valueOf 메소드를 사용해 숫자를 문자로 바꿔 저장.
for (int i = 0; i < numbers.length; i++) {
strNumbers[i] = String.valueOf(numbers[i]);
}
// 컬렉션 프레임워크 Arrays 클래스의 sort 메소드사용.
// Comparator 메서드를 사용해 객체간의 특정한 정렬을 한다.
// compare() 메서드를 오버라이딩해서 숫자간 비교.
Arrays.sort(strNumbers, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2 + o1).compareTo(o1 + o2);
}
});
// 맨 처음 문자가 0이면 0반환
if (strNumbers[0].equals("0")) {
return "0";
}
// String strNumber에 순차적으로 저장해 answer로 return
String answer = "";
for (String strNumber : strNumbers) {
answer += strNumber;
}
return answer;
}
public static void main(String[] args) {
Solution s = new Solution();
int number[] = { 6, 10, 2 };
int number2[] = { 3, 30, 34, 5, 9 };
System.out.println(s.solution(number));
System.out.println(s.solution(number2));
}
}
|
cs |
오늘은 여기까지입니다 감사합니다.
'Java' 카테고리의 다른 글
Java의 Math 클래스 (0) | 2019.05.17 |
---|---|
Java의 문자열 분리 (StringTokenizer) (0) | 2019.05.16 |
Java의 == 연산자와 equals 메소드 (0) | 2019.05.13 |
Java의 추상 클래스 (0) | 2019.05.11 |
Java의 생성자 (0) | 2019.04.29 |