https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
int len = (int) (Math.log10(numbers[i])+1); //자릿수
if(len >= 2){
a = numbers[i]/(1*(10*(len-1))); //앞자리 숫자
} else {
a = numbers[i];
}
앞자리 수만 비교해서 정렬 후 앞자리가 같으면 뒷자리 정렬하면 되겠지 생각했다.
처음엔 삽질 너무 많이 하다가 안되겠다 싶고 이걸 풀어도 시간초과나겠다 싶어서 결국 구글링.,,.,
🌌 전체 코드
import java.util.Arrays;
class Solution {
public String solution(int[] numbers) {
StringBuilder sb = new StringBuilder();
String[] arr = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
arr[i] = Integer.toString(numbers[i]);
}
Arrays.sort(arr, (String o1, String o2) -> (o2+o1).compareTo(o1+o2));
if(arr[0].equals("0")){ return "0"; }
for(String val : arr) sb.append(val);
return sb.toString();
}
}
1. String 배열로 요소들을 다 넣어준다.
(처음 시도엔 int로 처리하고 결과 값을 String으로 형변환해주려고 했는데 이건 너무 멀리가야했음)
StringBuilder sb = new StringBuilder();
String[] arr = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
arr[i] = Integer.toString(numbers[i]);
}
2. compareTo 사용하여 비교
그냥 정렬하게 될 경우 6102가 반환되는데, 6102 < 6210 이므로
각각 더 한 값을 비교하여 큰 값을 리턴한다.
아래 코드 후 arr를 출력해보면 [6, 2 , 10]으로 출력된다.
compareTo!!
람다식을 활용하면 코드를 간결하게 작성할 수 있다. 니꼬 js강의 들을 때 람다식으로 많이 써서 그나마 익숙해졌다!
Arrays.sort(arr, (String o1, String o2) -> (o2+o1).compareTo(o1+o2));
이 부분만 알면 간단한 문제였다,,
Arrays.sort(arr, new Comparator<String>(){
@Override
public int compare(String a, String b){
return (b + a).compareTo(a + b);
}
});
이런 식으로도 쓸 수 있는데 완벽하게 Comparator를 잘 몰라서 더 알아봐야 할 것 같다.
그리고 Collections.sort(); 을 활용한 분도 계셨는데 이것도,, ( 리스트를 사용하심 List<Integer> list = new ArrayList<>(); )
3. 앞자리가 0이라면 0을 반환
0000이라면 0을 출력해야하니깐
if(arr[0].equals("0")){ return "0"; }
4. 출력
for(String val : arr) sb.append(val);
return sb.toString();
'JAVA' 카테고리의 다른 글
[JAVA] 2231번 분해합 (브루트포스 알고리즘) (0) | 2022.08.04 |
---|---|
[JAVA] 1259번 팰린드롬수 (0) | 2022.08.03 |
[Java] 프로그래머스 Lv.1 체육복 (그리디 알고리즘) (0) | 2022.08.01 |
[JAVA] 2748번 피보나치 수2 (0) | 2022.07.31 |
[Java] 투포인터 (백트래킹보다 효율적, 백준 2003번) (0) | 2022.07.31 |