반응형
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
다른사람의 풀이 (java) = 나의 풀이
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
// 숫자를 문자열로 변환
String[] result = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
result[i] = String.valueOf(numbers[i]);
}
// 정렬
Arrays.sort(result, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
// 0만 여러개 있는 배열의 경우 하나의 0만 리턴
if (result[0].equals("0")) {
return "0";
}
String answer = "";
// 정렬된 문자 하나로 합치기
for (String a : result) {
answer += a;
}
return answer;
}
}
풀이 방법
몇몇 테스트 케이스를 통과하지 못하고.. 1시간 정도 고민하다가, 결국 다른 사람의 풀이를 보고 풀었다
관건은 실제로 정렬을 구현하는 부분이었다.
혼자 힘으로 풀때는 문자 3 vs 30 이 나올때 330이 출력되도록 하는 로직 고민하다가 시간을 다 써버림..
중요 포인트 - 두개의 문자를 합쳐 만드는 수의 대소 비교
Arrays.sort(result, (o1, o2) -> (o2 + o1).compareTo(o1 + o2))
느낀점
- Array 정렬 방법
- 단순 정렬시 - Array.sort(arr)
- 복잡 정렬시 - Arrays.sort(result, (o1, o2) -> (o2 + o1).compareTo(o1 + o2))
반응형
'개발 > 코딩 테스트' 카테고리의 다른 글
[알고리즘] 프로그래머스 > 스택/큐 > 주식 가격 (0) | 2022.08.03 |
---|---|
[알고리즘] 프로그래머스 > 스택/큐 > 같은 숫자는 싫어 (0) | 2022.08.01 |
[알고리즘] 프로그래머스 > 정렬 > 가장 큰 수 (0) | 2022.07.24 |
[프로그래머스] 문자열 다루기 기본 (0) | 2022.07.06 |
[프로그래머스] 나머지가 1이 되는 수 찾기 (0) | 2022.07.05 |