본문 바로가기
알고리즘/프로그래머스

(LEVEL 1)프로그래머스 - 숫자 짝꿍(JAVA)

by 꾸준함 2023. 1. 15.

문제


입출력 예


풀이.

 

1. X,Y에 포함된 0~9의 숫자의 개수를 세기 위한 배열을 각각 선언

2. X,Y의 크기만큼 반복문을 돌면서 0~9까지 해당하는 인덱스에 값을 1씩 추가 (char형의 숫자에 '0' 의 문자를 빼면 아스키코드 계산으로 숫자로 계산됨)

3. 이후 가장 큰 수를 나타내야하므로 역순으로 9~0 까지 반복문을 돌며 x,y 중 더  개수가 적은 수 만큼 반복하며 answer에 문자 추가

 ex) X - "100" , Y - "123450" 일 때 X는 '0'이 2개이고 '1'이 1개 Y는 0~5까지 각 1개씩 이므로 더 개수가 적은 수 만큼 반복해서 최종적으로 "10" 이된다.

4.마지막으로 만약 같은 값이 없을시 -1을 반환, 첫문자가 0일시 0이외에 숫자는 같은값이 없고, 0이 2개씩 포함된경우 "00" 이되어 첫문자가 0이라면 0을 반환 , 그 이외의 값은 그대로 String형태로 반환

 

> StringBuilder를 이용하기전엔 시간초과 에러가떠서 StringBuilder를 활용해서 해결


코드

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        int x[] = new int[10];
        int y[] = new int[10];
        for(int i=0;i<X.length();i++){
            x[X.charAt(i)-'0']++;
        }
        for(int i=0;i<Y.length();i++){
            y[Y.charAt(i)-'0']++;
        }
        for(int i=9;i>=0;i--){
            for(int j=0;j<Math.min(x[i],y[i]);j++){
                answer.append(i);
            }
        }
        if("".equals(answer.toString()))
            return "-1";
        else if(answer.charAt(0)=='0')
            return "0";
        else
            return answer.toString();
    }
}