[자바JAVA]Big Sorting 해커랭크
문제
String 타입의 정렬안된 배열을 숫자오름차순으로 숫자를 정렬하는 문제이다.
Consider an array of numeric strings where each string is a positive number with anywhere from to digits. Sort the array’s elements in non-decreasing, or ascending order of their integer values and return the sorted array.
입출력예시1
1
2
3
4
5//입력
[1 200 150 3]
//출력
[1 3 150 200]입출력예시2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16//입력
6 <-길이
31415926535897932384626433832795
1
3
10
3
5
//출력
1
3
3
5
10
31415926535897932384626433832795입출력예시3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20//입력
8 <-길이
1
2
100
12303479849857341718340192371
3084193741082937
3084193741082938
111
200
//출력
1
2
100
111
200
3084193741082937
3084193741082938
12303479849857341718340192371
첫 시도: NumberFormatException
처음에는 String[]을 long[]로 바꾼 뒤 오름차순 정렬 후 다시 String[]로 만들어서 출력하고자했다.
하지만 숫자가 long보다 더 커서 NumberFormatException이 발생했다.
1 | public class BigSorting { |
성공한 코드
람다식을 활용하여 unsorted 배열을 정렬했다.x.compareTo(y)
는 int를 리턴한다.
- x == y면 0을 출력,
- x > y 면 1을 출력,
- x < y 면 -1을 출력한다
리턴한 값을 기준으로 sort한다.
1 | public class BigSorting { |
arr, x, y를 출력하면 아래와 같다.
근데 x.compareTo(y): 2
가 어떻게 나왔는지 구글링을 해도 모르겠다… 왜 2가 나왔지?
그래서 그냥 암기하기로했다…..
1 | 시작 arr: [31415926535897932384626433832795, 1, 3, 10, 3, 5] x: 1 y:31415926535897932384626433832795 x.length() - y.length(): -31 |
참고
- 람다식 : https://codeman77.tistory.com/40
- compareTo() : https://www.tutorialspoint.com/java/number_compareto.htm