📂문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbersreturn
[6, 10, 2] | 6210 |
[3, 30, 34, 5, 9] | 9534330 |
📂아이디어 및 알고리즘(문제풀이)
- numbers에 있는 값들을 조합하여 최대로 큰 수를 출력하는 문제이다. 조합을 그냥 더해주게 되면 값이 overflow가 나기 때문에 조합하기 전에 String[] 로 만들어 주었다.
- 매번 조합을 하게되면 시간초과가 발생하기 때문에 Comparator<String>()로 비교하여 String[]요소 끼리 더했을때 가장 크게 되는 값들로 정렬을 해준다.
- 그리고 모든 배열의 값이 "0"일 경우는 "0"만 출력해 주어야 하므로 그 때의 예외 처리를 해준다.
- String에 concat을 이용해 String[]에 들어있는 값들을 더해 준다.
📂소스 코드

📂코드 결과
📂후일담
매번 정렬을 해주면서 값을 비교할지 정렬을 미리 해주고 값을 더해서 해줄지에 따라 시간이 많이 차이 난답니다.
그래서 항상 비교하는 문제는 최대한 반복을 줄일 수 있도록 생각하고 문제를 해결해 주어야 합니다.👊👊
'알고리즘(Java) > programmers' 카테고리의 다른 글
[JAVA] 모의고사 (코딩테스트 고득점 Kit [ 완전탐색 ]) - LEVEL1 (0) | 2020.08.30 |
---|---|
[JAVA] H - Index(코딩테스트 고득점 Kit [ 정렬 ]) - LEVEL2 (0) | 2020.08.30 |
[JAVA]K번째 수(코딩테스트 고득점 Kit [ 정렬 ]) - LEVEL1 (0) | 2020.08.25 |
[JAVA]이중 우선순위 큐(코딩테스트 고득점 Kit[힙(heap)]) - LEVEL3 (0) | 2020.08.25 |
[JAVA]디스크 컨트롤러 (코딩테스트 고득점 Kit[힙(heap)]) - LEVEL3 (0) | 2020.08.23 |