숫자 짝꿍 (자바) v2

김재현·2024년 5월 8일
0

알고리즘 풀이

목록 보기
85/89
post-thumbnail

이전 풀이: 숫자 짝꿍 (자바)

문제

정답 풀이

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());

					...

이전에 제출했던 풇이의 일부분이다.

  1. 모두 공통된게 0인지 확인 할게 아니라, 내림차순 정렬 후 0으로 시작하는지만 확인하면 된다.

  2. "정렬, 변환, 출력"에서 내림차순을 하고 싶었던 것 같은데, 이미 오름차순으로 정렬되어 있는 것을 왜 또 sort()를 했던 것일까?? 그냥 reverse()로 내림차순 정렬을 해주면 된다.

정렬이 안되어있는 List 자료구조라면 "list".sort(Collections.reverseOrder()); 를 사용하는 것이 좋겠다.

reverse()와 달리, reverseOrder()는 Comparator를 역순으로 만들어주는 메서드이다.
따라서 Comparator를 정의해줘야 쓸 수 있다.

하지만 sort()와 함께 썼기 때문에 내부적으로 Comparator를 호출되어 "list".sort(Collections.reverseOrder()); 가 가능한 것이다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글