728x90
반응형
오늘의 학습 키워드
- 정렬
오늘의 회고
1. 문제
2. 해결 방안
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
String[] numbersStr = new String[numbers.length];
for(int i=0; i<numbers.length; i++) {
numbersStr[i] = String.valueOf(numbers[i]);
}
Arrays.sort(numbersStr, (o1, o2) -> (o2+o1).compareTo(o1+o2));
if(numbersStr[0].equals("0")) return "0";
return String.join("",numbersStr);
}
}
- 숫자 배열을 문자로 변환해서 담는다.
- Arrays.sort()에 정렬하는 로직을 추가한다. 문자 앞뒤를 붙여서 비교한다.
- 첫번째 값이 "0"이면 전체 요소가 "0"이기 때문에 문자열로 붙였을 때 "0000" 같은 경우가 되지 않도록 "0" 만 반환한다. (놓칠 수 있는 포인트!)
3. 피드백
<처음 고민했던 방향>
- 앞+뒤, 뒤+앞 붙여서 비교한건 방향성이 맞았는데, 나는 "앞+뒤" -> 숫자로 변환 해서 숫자로 비교하려고 했다. 그래서 비교 요소 중에 0인 경우가 나올 경우도 비교 조건으로 추가했다.
- 근데 숫자 비교를 시킬 필요가 없이, 합친 문자끼리 비교하면, 앞이 0일 경우 어차피 뒤로 정렬되니 0처리를 안해도 되었음.
- 첫번째 값이 "0"인 경우 "0" 반환 처리하는 것도 놓쳤어서 테스트 케이스를 통과 못했던 것 같다.
4. 새로 알게된 것
- 정렬 리턴으로 a.compareTo(b) 사용하기 (compareTo는 원시타입 아닌 객체형만 사용 가능)
- a:기준값, b:비교대상
- a가 b 보다 크면 1, 동일하면 0, 작으면 -1
- 1(양수)이면 순서 교체 (a, b -> b, a)
- 배열 정렬 시, 람다식 정렬로 짧게 작성할 수 있다
- Arrays.sort(배열, (o1, o2) -> o2.compareTo(o1)); // 내림차순
- String 합치는 방법
- 1. String.join()
- 2. StringBuilder
// 1. String.join 사용
String[] arr = {"a","b","c"};
String.join("", arr); // "abc"
// 2. StringBuilder 사용
StringBuilder sb = new StringBuilder();
sb.append("앞문자").append(" 뒷문자");
System.out.println(sb.toString()); // "앞문자 뒷문자"
System.out.println(sb); // "앞문자 뒷문자"
728x90
반응형
'알고리즘 > 99클럽 코딩테스트 스터디 2기' 카테고리의 다른 글
99클럽 코테 스터디 10일차 TIL - LV2. 소수 찾기 (0) | 2024.05.29 |
---|---|
99클럽 코테 스터디 8일차 TIL - LV2. H-Index (0) | 2024.05.27 |
99클럽 코테 스터디 6일차 TIL - 2336. Smallest Number in Infinite Set (LeetCode) (0) | 2024.05.25 |
99클럽 코테 스터디 5일차 TIL - LV2. 더 맵게 (0) | 2024.05.24 |
99클럽 코테 스터디 4일차 TIL - LV3. 주식 가격 (0) | 2024.05.24 |