빙응의 공부 블로그

[Programmers]Lv.1 숫자짝꿍 본문

Argorithm

[Programmers]Lv.1 숫자짝꿍

빙응이 2023. 12. 26. 17:01


📝풀이

구현 자체는 매우 쉬운 문제였다. 그게 문제가 아니지만..

  • x와 y의 중복되는 자리 짝꿍 찾기 
  • 찾은 짝궁 sort로 정렬해 가장 큰 값으로 만들기 
class Solution {
    public String solution(String X, String Y) {
        List<Integer> answer = new ArrayList<>();

        for (int i = 0; i < Y.length(); i++) {
            char yChar = Y.charAt(i);
            for (int j = 0; j < X.length(); j++) {
                char xChar = X.charAt(j);
                if (xChar == yChar) {
                    answer.add(Character.getNumericValue(xChar));
                    X = X.substring(0, j) + X.substring(j + 1); // 중복 방지
                    break;
                }
            }
        }

        if (answer.isEmpty()) {
            return "-1";
        } else {
            Collections.sort(answer, Collections.reverseOrder());
            StringBuilder result = new StringBuilder();
            answer.forEach(result::append);

            if (result.charAt(0) == '0') {
                return "0";
            } else {
                return result.toString();
            }
        }
    }
}

 

내가 처음으로 구현한 코드이다. 간단하게 구현하였는데 바로 시간초과...

 

나중에 찾아보니 완전 다른 접근 방법을 사용하더라

난 생각도 못했다. 내가 아직 허술한 사람이라 그런것 같다

import java.util.*;

class Solution {
    static public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();

        int[] x = new int[10];
        int[] y = new int[10];
        List<Integer> list = new ArrayList<Integer>();

        for (int i = 0; i < X.length(); i++) {
            int temp = X.charAt(i) - '0';
            x[temp]++;
        }
        for (int i = 0; i < Y.length(); i++) {
            int temp = Y.charAt(i) - '0';
            y[temp]++;
        }

        for (int i = 9; i >= 0; i--) {
            if (x[i] != 0 && y[i] != 0) {
                for (int j = 0; j < Math.min(x[i], y[i]); j++) list.add(i);
            }
        }

        if (list.size() == 0) {
            return "-1";
        } else if (list.get(0) == 0) {
            return "0";
        }

        for (int i : list) {
            answer.append(i);
        }

        return answer.toString();
    }

}

 

해당 코드는 단순히 1~9 자리의 숫자들이 몇개 있는지만 비교하며 

x와 y 1~9 출현 빈도 중 가장 작은 값을 찾아 정답으로 만든다. 

'Argorithm' 카테고리의 다른 글

[Programmers]Lv.1 신고 결과 받기  (0) 2023.12.27
[Programmers]Lv.1 성격 유형 검사  (1) 2023.12.27
[Programmers]Lv.1 콜라문제  (0) 2023.12.18
[Programmers]Lv.1 옹알이(2)  (0) 2023.12.15
[Programmers]LV.1 햄버거 만들기  (0) 2023.12.13