πŸ“š μ½”λ”©ν…ŒμŠ€νŠΈ/λ°±μ€€ & ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€][JAVA]Level 1 : 숫자 짝ꢁ

deep_lee 2022. 11. 4. 15:33

문제 μ„€λͺ…

두 μ •μˆ˜ X, Y의 μž„μ˜μ˜ μžλ¦¬μ—μ„œ κ³΅ν†΅μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” μ •μˆ˜ k(0 ≤ k ≤ 9)듀을 μ΄μš©ν•˜μ—¬ λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 큰 μ •μˆ˜λ₯Ό 두 수의 짝꿍이라 ν•©λ‹ˆλ‹€(단, κ³΅ν†΅μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” μ •μˆ˜ 쀑 μ„œλ‘œ 짝지을 수 μžˆλŠ” 숫자만 μ‚¬μš©ν•©λ‹ˆλ‹€). X, Y의 짝꿍이 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄, 짝꿍은 -1μž…λ‹ˆλ‹€. X, Y의 짝꿍이 0으둜만 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€λ©΄, 짝꿍은 0μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Yμ—μ„œ κ³΅ν†΅μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” 3, 0, 3으둜 λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 큰 μ •μˆ˜μΈ 330μž…λ‹ˆλ‹€. λ‹€λ₯Έ μ˜ˆμ‹œλ‘œ X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Yμ—μ„œ κ³΅ν†΅μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” 2, 5, 5둜 λ§Œλ“€ 수 μžˆλŠ” κ°€μž₯ 큰 μ •μˆ˜μΈ 552μž…λ‹ˆλ‹€(Xμ—λŠ” 5κ°€ 3개, Yμ—λŠ” 5κ°€ 2개 λ‚˜νƒ€λ‚˜λ―€λ‘œ λ‚¨λŠ” 5 ν•œ κ°œλŠ” 짝 지을 수 μ—†μŠ΅λ‹ˆλ‹€.)
두 μ •μˆ˜ X, Yκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, X, Y의 짝꿍을 returnν•˜λŠ” solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­
  • 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000μž…λ‹ˆλ‹€.
  • X, YλŠ” 0으둜 μ‹œμž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • X, Y의 짝꿍은 μƒλ‹Ήνžˆ 큰 μ •μˆ˜μΌ 수 μžˆμœΌλ―€λ‘œ, λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

μž…μΆœλ ₯ 예XYresult
"100" "2345" "-1"
"100" "203045" "0"
"100" "123450" "10"
"12321" "42531" "321"
"5525" "1255" "552"

 

 

 


 

 

μ²˜μŒμ— λ‹Ήμ—°νžˆ 2쀑 for문을 λŒλ ΈλŠ”λ°, 숫자의 λ²”μœ„κ°€ 3λ°±λ§ŒκΉŒμ§€ 있기 λ•Œλ¬Έμ—

2쀑 forλ¬Έ 돌리면 μ‹œκ°„λ³΅μž‘λ„μƒ μ ˆλŒ€λ‘œ ν†΅κ³Όν• μˆ˜μ—†λ‹€. 

 

κ·Έλž˜μ„œ X,Y자체λ₯Ό μƒκ°ν•˜μ§€λ§κ³ , 0~9의 숫자라고 생각을 λ°”κΏ”μ„œ ν’€λ©΄ λœλ‹€. 

κ·Έλž˜μ„œ 각각 10자리의 배열을 μƒμ„±ν•΄μ„œ μΉ΄μš΄νŒ…ν•΄μ£Όκ³ .. 같은 숫자 μžˆλŠ” 만큼 ν•΄λ‹Ή index숫자λ₯Ό μΆ”κ°€ν•΄μ£Όλ©΄ λœλ‹€.. 

 

 

class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        int[] x_index=new int[10];
        int[] y_index=new int[10];
        for(String x:X.split("")) x_index[Integer.parseInt(x)]++;
        for(String x:Y.split("")) y_index[Integer.parseInt(x)]++;

        StringBuilder sb=new StringBuilder();
        for(int i=9; i>=0; i--){
            while(x_index[i]>0&&y_index[i]>0){
                sb.append(i);
                x_index[i]--;
                y_index[i]--;
            }
        }
        if("".equals(sb.toString())) answer="-1";
        else if("0".equals(sb.toString().substring(0,1))) answer="0";
        else answer=sb.toString();
        return answer;
    }
}