숫자 짝꿍 -JAVA

2025. 2. 21. 16:27백준 및 프로그래머스/프로그래머스 LV 1

문제 설명

 

요약: X,Y의 짝궁 중에서 가장 큰 값이 무엇인지 구하는 문제 입니다.

 

제한 사항과 입출력 예시

100 -> 2345 서로 겹치는 짝궁이 없습니다. 없을 경우에는 "-1" 반환

100 -> 203045 서로 겹치는 짝궁이 있습니다. 0이 2개가 겹칩니다. 하지만 0은 몇개가 있더라도 가장 큰 수는 "0"입니다.

100 -> 123450 서로 겹치는 짝궁이 2개 있습니다. 1,0 한개 씩 겹칩니다. 이 중 가장 큰 수는 "10"입니다. 

이러한 방식으로 문제를 접근하고 코드를 작성하면 쉽게 풀 수 있습니다.

 

전체 코드

import java.util.*;
import java.lang.*;
class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        int n = X.length();
        int m = Y.length();
        Map<Character,Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        
        
        //1:0,2:3 이런 방식으로 숫자가 몇 개 있는 지 확인
        for(int i = 0; i<n; i++){
            char num = X.charAt(i);
            if(map.get(num) == null){
                map.put(num,1);
            }else{
                map.put(num,map.get(num)+1);
            }
        }
        
        // System.out.println(map);
        
        //Y값과 비교후 값이 있으면 list에 넣어줌
        for(int i = 0; i<m; i++){
            char num = Y.charAt(i);
            if(!map.containsKey(num) || map.get(num) == 0){
                continue;
            }
            if(map.get(num) > 0){
                map.put(num,map.get(num)-1);
                list.add(Integer.parseInt(String.valueOf(num)));
            }
        }
        if(list.isEmpty()){
            return "-1";
        }
        
        Collections.sort(list,Collections.reverseOrder());
        // System.out.println(list);
        for(int w : list){
            sb.append(w);
        }
        
        return sb.charAt(0) =='0' ? "0" : sb.toString();
    }
}

 

1.처음에 X에 있는 숫자 값이 몇 개 있는지 Map을 활용해 저장했습니다.

2.Map과 Y를 비교하면서 값이 있고 1개 이상인지 비교했습니다.

  - 값이 0이나오다면 숫자는 겹치지만 이미 다 사용했다는 이야기입니다.

3.1개 이상의 값이 존재한다면 LIST를 통해 값을 넣어줬습니다.

4.최댓 값을 구하는 문제이기에 LIST를 정렬해준다음 역순을 했습니다. -> EX) 0123 -> 3210 (이 방식으로 최댓 값을 구했습니다.) 하지만 이 부분은 더 효율적인 방법이 있을 거라 생각합니다.

5.StringBuilder 를 통해 list값을 갱신해줬습니다.

6.혹시 맨 앞 숫자가 0일경우에는 뒷 값도 0000000으로 배치 되어있어 젤 큰 숫자는 0이됩니다.

7.6번이 아니라면 최댓값을 나타냅니다.

 

결과

 

 

아마 더 효율적인 방법은 있을 거라 생각합니다.