프로그래머스 131128번 숫자 짝꿍 Java

: ) YOUNG·2024년 2월 15일
1

알고리즘

목록 보기
317/371
post-thumbnail

프로그래머스 131128번
https://school.programmers.co.kr/learn/courses/30/lessons/131128

문제



생각하기


  • 중복되는 숫자를 체크해서, 내림차순 정렬만 하면 된다.

  • 은근히 최적화가 중요한 문제인 것 같음



동작



결과


코드



import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        
        char[] chArr = X.toCharArray();
        char[] chArr2 = Y.toCharArray();
        int N = chArr.length;
        int M = chArr2.length;
        
        HashMap<Character, Integer> map = new HashMap<>();
        for(int i=0; i<N; i++) {
            char ch = chArr[i];
            
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }
        
        List<Character> list = new ArrayList<>();
        for(int i=0; i<M; i++) {
            char ch = chArr2[i];
            
            if(map.containsKey(ch) && map.get(ch) > 0) {
                list.add(ch);
                map.put(ch, map.get(ch) - 1);
            }
        }
                
        if(list.isEmpty()) {
            return "-1";
        }
        
        Collections.sort(list, Collections.reverseOrder());
        
        StringBuilder sb = new StringBuilder();
        for(char num : list) {
            sb.append(num);
        }
        
        // 내림차순으로 정렬했기 때문에 0이외의 숫자들이 먼저 나올 수 밖에 없음에도 불구하고, 0이 가장 앞에 온다는 것은 0밖에 없다는 것을 의미함
        if(sb.charAt(0) == '0') return "0";
        
        return sb.toString();
    } // End of solution()
} // End of Solution class

0개의 댓글