CodingTest/Java로 푼 코딩 테스트

[프로그래머스 / Java] 숫자 짝꿍

마볼링 2024. 6. 15. 09:07

 

 

풀이

  • Map 형식으로 X, Y의 문자 빈도를 계산한다.
  • 9부터 0까지 내림차순으로 반복문을 만든다.
  • 두 개의 Map의 같은 키가 있으면 값 중 작은값 만큼 숫자를 추가한다(String)
  • 결과에 따라 리턴값을 변경한다.
import java.util.*;
class Solution {
    public String solution(String X, String Y) {
        // 두 숫자의 각 숫자 빈도를 저장할 맵 생성
        Map<Character, Integer> countX = new HashMap<>();
        Map<Character, Integer> countY = new HashMap<>();

        // X의 숫자 빈도 계산
        for (char c : X.toCharArray()) {
            countX.put(c, countX.getOrDefault(c, 0) + 1);
        }

        // Y의 숫자 빈도 계산
        for (char c : Y.toCharArray()) {
            countY.put(c, countY.getOrDefault(c, 0) + 1);
        }

        // 결과를 저장할 StringBuilder
        StringBuilder sb = new StringBuilder();

        // 9부터 0까지 공통 숫자를 찾아 결과에 추가
        for (char c = '9'; c >= '0'; c--) {
            if (countX.containsKey(c) && countY.containsKey(c)) {
                int commonCount = Math.min(countX.get(c), countY.get(c));
                for (int i = 0; i < commonCount; i++) {
                    sb.append(c);
                }
            }
        }

        // 결과가 빈 문자열이면 -1 반환
        if (sb.length() == 0) {
            return "-1";
        }

        // 결과가 0으로만 구성되어 있으면 0 반환
        if (sb.charAt(0) == '0') {
            return "0";
        }

        // 결과 반환
        return sb.toString();
    }
}