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

2025. 7. 21. 18:08·CodingTest/Programmers

사진을 클릭하면 해당 문제로 이동

 

💡풀이 1

import java.util.*;

class Solution {

    // 문자열을 받아 각 숫자의 개수를 세어 Map으로 반환하는 함수
    private Map<Integer, Integer> getNumberMapByStr(String str) {
        Map<Integer, Integer> map = new HashMap<>();

        // 문자열을 한 글자씩 숫자로 변환하여 개수를 셈
        for(String s : str.split("")) {
            int n = Integer.parseInt(s);
            map.put(n, map.getOrDefault(n, 0) + 1);
        }
        return map;
    }

    public String solution(String X, String Y) {
        // X와 Y의 숫자 개수를 각각 Map으로 만듦
        Map<Integer, Integer> xMap = getNumberMapByStr(X);
        Map<Integer, Integer> yMap = getNumberMapByStr(Y);
        StringBuilder sb = new StringBuilder();

        // 0부터 9까지 공통으로 존재하는 숫자를 찾음
        for(int i = 0; i < 10; i++) {
            if(xMap.containsKey(i) && yMap.containsKey(i)) {
                // 공통된 개수(더 적은 쪽)만큼 숫자를 StringBuilder에 추가
                int min = Math.min(xMap.get(i), yMap.get(i));
                sb.append(String.valueOf(i).repeat(min));
            }
        }

        // 공통된 숫자가 없으면 "-1" 반환
        if(sb.length() == 0) {
            return "-1";
        }

        // 가장 큰 수를 만들기 위해 문자들을 내림차순으로 정렬
        String[] answer = sb.toString().split("");
        Arrays.sort(answer, Comparator.reverseOrder());

        // 정렬된 문자 배열을 다시 하나의 문자열로 합침
        String result = String.join("", answer);

        // 결과가 "0"으로 시작하면 "0"을, 아니면 결과 그대로 반환
        return result.startsWith("0") ? "0" : result;
    }
}

💡풀이 2

- 9부터 0까지 역순으로 순회하여 역순 정렬 알고리즘을 생략함

import java.util.HashMap;
import java.util.Map;

class Solution2 {

    // 문자열을 받아 각 숫자의 개수를 세어 Map으로 반환하는 함수
    private Map<Integer, Integer> getNumberMapByStr(String str) {
        Map<Integer, Integer> map = new HashMap<>();

        // 문자열을 한 글자씩 숫자로 변환하여 개수를 셈
        for(String s : str.split("")) {
            int n = Integer.parseInt(s);
            map.put(n, map.getOrDefault(n, 0) + 1);
        }
        return map;
    }

    public String solution(String X, String Y) {
        // X와 Y의 숫자 개수를 각각 Map으로 만듦
        Map<Integer, Integer> xMap = getNumberMapByStr(X);
        Map<Integer, Integer> yMap = getNumberMapByStr(Y);
        StringBuilder sb = new StringBuilder();

        // 9부터 0까지 공통으로 존재하는 숫자를 찾음 (9부터 순회하여 자동으로 역순정렬)
        for(int i = 9; i >= 0; i--) {
            if(xMap.containsKey(i) && yMap.containsKey(i)) {
                // 공통된 개수(더 적은 쪽)만큼 숫자를 StringBuilder에 추가
                int min = Math.min(xMap.get(i), yMap.get(i));
                sb.append(String.valueOf(i).repeat(min));
            }
        }

        String result = sb.toString();

        // 공통된 숫자가 없으면 "-1" 반환
        if(result.isEmpty()) {
            return "-1";
        }

        // 결과가 "0"으로 시작하면 "0"을, 아니면 결과 그대로 반환
        return result.startsWith("0") ? "0" : result;
    }
}

 

GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.

프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.

github.com

 

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스, Java] 크레인 인형뽑기 게임  (0) 2025.07.21
[프로그래머스, Java] 햄버거 만들기  (0) 2025.07.21
[프로그래머스, Java] 체육복  (0) 2025.07.21
[프로그래머스, Java] 완주하지 못한 선수  (0) 2025.07.21
[프로그래머스, Java][PCCE 기출문제] 9번 / 이웃한 칸  (0) 2025.07.18
'CodingTest/Programmers' 카테고리의 다른 글
  • [프로그래머스, Java] 크레인 인형뽑기 게임
  • [프로그래머스, Java] 햄버거 만들기
  • [프로그래머스, Java] 체육복
  • [프로그래머스, Java] 완주하지 못한 선수
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (18) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (79)
        • Programmers (79)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    StringTokenizer
    json
    codingtest
    switch
    programmers
    java
    BufferedWriter
    BufferedReader
    effectivejava
    CS
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, Java] 숫자 짝꿍
상단으로

티스토리툴바