이전 풀이: 숫자 짝꿍 (자바)
import java.util.*;
class Solution {
public String solution(String X, String Y) {
// 반복되는 횟수를 카운트
int[] xCount = new int[10];
int[] yCount = new int[10];
for(char c : X.toCharArray()) {
xCount[c-'0']++;
}
for(char c : Y.toCharArray()) {
yCount[c-'0']++;
}
// 카운트 된 숫자를 List에 오름차순으로 삽입
List<Integer> list = new ArrayList<>();
for(int i=0;i<10;i++) {
int count = Math.min(xCount[i],yCount[i]);
for(int j=0;j<count;j++) {
list.add(i);
}
}
// 짝꿍이 없다면 -1 반환
if(list.size()==0) {
return "-1";
}
// List를 내림차순으로 변환
Collections.reverse(list);
// 0으로 시작한다면 0 반환
if(list.get(0)==0) {
return "0";
}
// List를 String으로 변환
StringBuilder builder = new StringBuilder();
for(int num : list) {
builder.append(num);
}
return builder.toString();
}
}
또 for문 돌렸다가 시간초과가 나왔다!!
분하다.
새로운 문제 풀이 시도 + 익숙하지 않은 StringBuilder까지 써야하니 쉽게 풀 수 없었다.
...
//모두 공통된게 모두 0이라면 0
if (mateList.stream().allMatch(a->a==0)) return "0";
//정렬, 변환, 출력
mateList.sort(Collections.reverseOrder());
...
이전에 제출했던 풇이의 일부분이다.
모두 공통된게 0인지 확인 할게 아니라, 내림차순 정렬 후 0으로 시작하는지만 확인하면 된다.
"정렬, 변환, 출력"에서 내림차순을 하고 싶었던 것 같은데, 이미 오름차순으로 정렬되어 있는 것을 왜 또 sort()
를 했던 것일까?? 그냥 reverse()
로 내림차순 정렬을 해주면 된다.
정렬이 안되어있는 List 자료구조라면
"list".sort(Collections.reverseOrder());
를 사용하는 것이 좋겠다.
reverse()
와 달리, reverseOrder()
는 Comparator를 역순으로 만들어주는 메서드이다.
따라서 Comparator를 정의해줘야 쓸 수 있다.
하지만 sort()
와 함께 썼기 때문에 내부적으로 Comparator를 호출되어 "list".sort(Collections.reverseOrder());
가 가능한 것이다.