알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔
import java.lang.Math;

class Solution {
    public String solution(String X, String Y) {
        // x , y 랑 둘 중 작은거로 반복문 돌림
        // 작은거를 내림차순으로 정렬 그거 리턴
        // 내림차순으로 정렬했을때 제일 큰 수 0일 경우 0으로 리턴
        // 같은 수 없을 경우 -1
        String answer = "";
        X = change(X);
        Y = change(Y);

        if(X.charAt(0) == '0' || Y.charAt(0) == '0'){return "0";}
        
        String big = (X.length() >= Y.length() ? X : Y);
        String small = (X.length() >= Y.length() ? Y : X);

        char tmp = ' ';
        for(int i=0; i<small.length(); i++){
            if(big.indexOf(small.charAt(i)) != -1){
                answer+=small.charAt(i);
                big = big.substring(0, big.indexOf(small.charAt(i))) + big.indexOf(big.indexOf(small.charAt(i)), big.length() -1);
            }
        }
        
        if(answer.length() == 0){
            answer = "-1";
        }
        
        return answer;
    }
    
    public String change(String str){
        char[] ch = str.toCharArray();
        char temp = ' ';
        
        for(int i=0; i<str.length(); i++){
            for(int j=i+1; j<str.length()-1; j++){
                if(ch[i] < ch[j]){
                    temp = ch[i];
                    ch[i] = ch[j];
                    ch[j] = temp;
                }
            }
        }
        
        str = new String(ch, 0, ch.length);
        return str;
    }
}

change를 이용해서 내림차순으로 배치한 후

같은게 있으면 제거하고 answer++ 하는 방식으로 했으나 틀림..


Solution✍
class Solution {
    public String solution(String X, String Y) {
        // String으로 하면 시간 초과
        StringBuilder answer = new StringBuilder();
        
        int[] xArr = new int[10];
        int[] yArr = new int[10];
        
        for(String tmp : X.split("")){
            xArr[Integer.parseInt(tmp)]++;
        }
        
        for(String tmp : Y.split("")){
            yArr[Integer.parseInt(tmp)]++;
        }
        
        for(int i=9; i>=0; i--){
            if(xArr[i] > 0 && yArr[i] > 0){
                for(int j=0; j<Math.min(xArr[i],yArr[i]); j++){
                    answer.append(i);
                }
            }
        }
        
        if(answer.length() == 0){return "-1";}
        else if(answer.charAt(0) == '0'){return "0";}
        
        return answer.toString();
    }
}

Review🤩

동적인 문자열을 다룰때 StringBuilder를 사용하는것이 효과적 String으로 해서 통과하지 못함

배열 길이 이용해서 구하므로 내림차순을 할 필요 없음


 

+ Recent posts