숫자 짝꿍 (자바)

김재현·2023년 12월 1일
0

알고리즘 풀이

목록 보기
39/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<Integer> mateList = new ArrayList<>();
        for (int i=0;i< xCount.length;i++) {
            int commonCount = Math.min(xCount[i], yCount[i]);
            for (int j=0;j<commonCount;j++) {
                mateList.add(i);
            }
        }
        //공통된 숫자가 없다면 -1
        if (mateList.isEmpty()) return "-1";
        //모두 공통된게 모두 0이라면 0
        if (mateList.stream().allMatch(a->a==0)) return "0";

        //정렬, 변환, 출력
        mateList.sort(Collections.reverseOrder());
        
        StringBuilder resultBuilder = new StringBuilder();
        for (int num : mateList) {
            resultBuilder.append(num);
        }

        return resultBuilder.toString();
    }
}

처음에는 이중for문을 돌렸다가 시간초과가 나왔다.
그래서 힌트를 보고 각 숫자가 나오는 회수를 계산했다.

그런데 아래의 오답코드에서 정렬 한 뒤 변환 부분에서 자꾸 오류가 나는 것이었다!
그래서 어쩔 수 없이 chatGPT의 힘을 빌렸다...
덕분에 StringBuilder와 append라는 것으로 안전하게 변환 가능하다는걸 알았다.

오답 코드

        //정렬, 변환, 출력
        mateList.sort(Collections.reverseOrder());

        long a=0;
        for(int i=0;i< mateList.size();i++) {
            a+=mateList.get(i)*Math.pow(10, mateList.size()-i-1);
        }
        return a+"";

long 범위를 넘어서는 무언가가 입력된게 아닐까 생각된다. (double도 유효숫자가 넘어가는듯했다)
제한사랑의 300만자릿수..? 굉장히 의미심장하다.
업로드중..

관련 포스팅

profile
I live in Seoul, Korea, Handsome

0개의 댓글