Nevertheless

[JAVA] 숫자 짝꿍 본문

코딩테스트/Programmers

[JAVA] 숫자 짝꿍

hxx_1 2024. 6. 8. 17:42

< 풀이 >

import java.util.*;
class Solution {
    public String solution(String X, String Y) {
        int x[]=new int[10];
        int y[]=new int[10];
        
        for(int i=0;i<X.length();i++){
            int temp=X.charAt(i)-'0';
            x[temp]++;
        }
        
        for(int i=0;i<Y.length();i++){
            int temp=Y.charAt(i)-'0';
            y[temp]++;
        }
        
        ArrayList<Integer> list=new ArrayList<>();
        StringBuilder sb=new StringBuilder();
        String answer = "";
        
        for(int i=0;i<x.length;i++){
            if(x[i]!=0&&y[i]!=0){
               int num=Math.min(x[i],y[i]);
               for(int j=0;j<num;j++){
                    list.add(i);
               }  
            }
            else
                continue;
        }
        
        for(int i=list.size()-1;i>=0;i--){
                sb.append(list.get(i));
        }
        
        answer=sb.toString();
        if(answer.equals("")) 
            answer = "-1";
        else if(answer.replace("0","") == "") 
            answer = "0";
        
        return answer;
    }
}

 

✏️ 풀이 방법

 

1. 각 숫자의 개수를 저장하기 위한 배열 x, y 를 생성한다. ( [0]의 값이 2라면 0이 2번 나온다는 뜻)

2. 문자열 X,Y를 구성하고 있는 숫자를 인덱스로 하여 배열 x,y의 값을 증가시킨다. 

3. 두 문자열의 공통으로 나타나는 정수를 구한다.

: x[i]의 값과 y[i]의 값이 0이 아니다. => i라는 수를 포함하고 있다.

: x[i]와 y[i]의 값 중에 작은 값으로 i의 개수를 정한다. (x[i]의 값이 3이고, y[i]의 값이 2라면 i가 공통적으로 2번 나타난다는 뜻이다.) 

: 해당 개수만큼 i를 list에 저장한다.

4. 가장 큰 수를 만들어야하므로 list를 뒤부터 돌아서 StringBuilder 형 변수 sb 에 값을 추가한다. 

5. sb를 String 형으로 변환하여 answer에 저장한다.

: answer이 빈 문자열이면=> 공통된 정수가 없다는 뜻이므로 -1 을 저장한다.

: 공통된 정수가 0밖에 없으면=> 값을 0으로 저장

6. answer 출력 

 

✍🏻 느낀점

 

이 문제는 어떻게 풀어야 할지 접근은 잘했는데, 공통된 정수가 모두 0인 경우에는 답을 0으로 해주는 부분에서 실수가 있었다. 그리고, StringBuilder 를 사용하기 전에는 시간초과도 생겼다. String 형으로 변수를 선언해주고, 값을 계속 변경해줬어야 해서 시간초과가 난 것 같다. 이러한 문제처럼 문자열의 값을 자주 변경해줘야 하는 경우에는 String 보다는 StringBuilder를 사용하도록 하고, 생각지 못한 부분에서 실수하지 않도록 생각을 좀 더 깊게 해야겠다. 

'코딩테스트 > Programmers' 카테고리의 다른 글

[JAVA] 숫자 문자열과 영단어  (0) 2024.06.14
[JAVA] 이웃한 칸  (1) 2024.06.10
[JAVA] 완주하지 못한 선수  (1) 2024.06.08
[JAVA] 크레인 인형 뽑기 게임  (0) 2024.06.01
[JAVA] 성격 유형 검사하기  (0) 2024.06.01