새소식

반응형
250x250
Programmers/Lv.1

프로그래머스 - 숫자 짝꿍

  • -
728x90
반응형

 

변수 준비 : 두 수 X와 Y에 나타나는 각 숫자에 대한 빈도를 저장할 빈 배열을 만든다.

이 배열은 크기가 10이며 이는 0부터 9까지 각각의 숫자들이 배열 X, Y에 몇 번 나타나는지 저장하기 위함이다.

int[] x = new int[10];
int[] y = new int[10];

 

숫자 빈도수 계산 : X,Y 배열을 순회하며 각 숫자의 빈도수를 증가시킨다.

Character.getNumericValue() 메소드를 활용하여 각 문자를 숫자로 전환 후 해당 숫자 인덱스에 해당하는 

배열의 요소값을 1씩 증가시킨다.

for(int i = 0; i < X.length(); i++) {
    int index = Character.getNumericValue(X.charAt(i));
    x[index]++;
}
for(int i = 0; i < Y.length(); i++) {
    int index = Character.getNumericValue(Y.charAt(i));
    y[index]++;
}

 

공통 숫자 찾기 및 정렬 : 두 배열을 순회하며 두 배열에 공통으로 나오는 숫자들을 찾는다. 

숫자 i가 X와 Y배열에 공통으로 나타난다면 두 배열에서 i의 값을 비교 후 더 작은 값을 리스트에 추가한다.

그 후 내림차순으로 변경한다.

ArrayList<Integer> numbers = new ArrayList<>();
for(int i = 0; i < 10; i++) {
    int minCount = Math.min(x[i], y[i]);
    for(int j = 0; j < minCount; j++) {
        numbers.add(i);
    }
}
Collections.sort(numbers, Collections.reverseOrder());

 

결과 조합 : StringBuilder를 사용해서 결과를 return한다.

StringBuilder sb = new StringBuilder();
for(Integer num : numbers) {
    sb.append(num);
}

String answer = sb.toString();
if(answer.isEmpty()) return "-1";
if(answer.charAt(0) == '0') return "0";
return answer;

 

전체코드

import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        int[] x = new int[10];
        int[] y = new int[10];
        for(int i = 0; i < X.length(); i++) {
            int index = Character.getNumericValue(X.charAt(i));
            x[index]++;
        }
        for(int i = 0; i < Y.length(); i++) {
            int index = Character.getNumericValue(Y.charAt(i));
            y[index]++;
        }
        ArrayList<Integer> numbers = new ArrayList<>();
        for(int i = 0; i < 10; i++) {
            int xNum = x[i];
            int yNum = y[i];
            if(xNum != 0 && yNum != 0) {
                if(xNum >= yNum) {
                    for(int j = 0; j < yNum; j++) {
                        numbers.add(i);
                    }
                } else {
                    for(int j = 0; j < xNum; j++) {
                        numbers.add(i);
                    }
                }
                
            }
        }
        Integer[] temp = numbers.toArray(new Integer[numbers.size()]);
        Arrays.sort(temp);
        for(int i = temp.length - 1; i >= 0; i--) {
            sb.append(temp[i]);
        }
        answer = sb.toString();
        if(answer.equals("")) answer = "-1";
        if(answer.charAt(0) == '0') answer = "0";
        return answer;
    }
}
728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.