프로그래머스 - 숫자 짝꿍(Java)

앞고기랑 소금·2024년 8월 7일

스파르타 TIL

목록 보기
17/43

17일차

  • 내가 작성한 코드 (통과못함)
class Solution {
	public String solution(String X, String Y) {
        String answer = "";
        int x = 0, y = 0, length = 0;
        for (int j = 9; j >= 0; j--) {
            if (X.contains(String.valueOf(j)) && X.contains(String.valueOf(j))) {
                x= X.length() - X.replace(String.valueOf(j), "").length();
                y= Y.length() - Y.replace(String.valueOf(j), "").length();
                length = Math.min(x, y);
                for (int i = 0; i < length; i++) {
                    answer += j;
                }
            }
        }
        if (answer == "") {
            answer = "-1";
        }
        if (answer.replace("0", "").equals("")) {
            answer = "0";
        }
        System.out.println(answer);
        return answer;
    }
}

시간 초과 발생. 찾아보니까 replace를 사용해서 시간이 오래걸림.

  • 다른사람들의 답안을 보고 이해해봄
class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        int[] x = {0,0,0,0,0,0,0,0,0,0};
        int[] y = {0,0,0,0,0,0,0,0,0,0};
        // X의 첫글자가 9면 x array의 index값이 9에 1씩 올라간다.
        // x array를 활용하여 X안에 어떤 숫자가 얼마나 들어있는지 확인한다.
        for(int i=0; i<X.length();i++){
        	// 아스키코드 48 = "0"이다.
           x[X.charAt(i)-48] += 1;
        }
        for(int i=0; i<Y.length();i++){
           y[Y.charAt(i)-48] += 1;
        }
        // 9 부터 시작해 0까지
        for(int i=9; i >= 0; i--){
        	// x와 y중 i값을 최소로 가진만큼 문자열에 추가
            for(int j=0; j<Math.min(x[i],y[i]); j++){
                answer.append(i);
            }
        }
        // answer에 아무값도 입력이 안돼있으면 -1 리턴
        if("".equals(answer.toString())){
           return "-1";
        // answer에 000...만 추가돼있으면 0 리턴
        }else if(answer.toString().charAt(0)==48){
           return "0";
        }else {
            return answer.toString();
        }
    }
}

배열을 이용해 숫자를 얼마나 가지고 있는지 활용하는거에서 정말 참신하다 생각했다.

0개의 댓글