[99클럽 35일차] [프로그래머스] Lv.1 숫자 짝꿍

Dev.Dana·2024년 12월 2일
0

Algorithm

목록 보기
25/25
post-thumbnail

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

문제 분석

두 수 X와 Y에서 공통으로 나타나는 숫자들을 이용하여 만들 수 있는 가장 큰 수를 찾아야 하는 문제이다.

문제 조건

  1. 공통으로 나타나는 숫자 중에서 짝지을 수 있는 숫자만 사용
  2. 짝꿍이 존재하지 않으면 "-1"을 반환
  3. 짝꿍이 0으로만 구성되어 있다면 "0"을 반환

해결 방법

  1. 숫자 개수 세기
  • 숫자는 0부터 9까지이므로 각 숫자의 개수를 저장하기 위해 크기가 10인 배열을 사용
  • X와 Y에서 각 숫자의 출현 횟수를 저장
  1. 최소 개수 찾기
  • 각 숫자 0부터 9까지에 대해 X와 Y에서의 출현 횟수 중 작은 값을 선택
  1. 결과 문자열 생성
  • 숫자 9부터 0까지 내림차순으로 반복하며, 짝지을 수 있는 횟수만큼 결과 문자열에 추가

코드 구현

public class Solution {
    public String solution(String X, String Y) {
        int[] countX = new int[10];
        int[] countY = new int[10];

        // X에서 각 숫자의 개수 세기
        for (char c : X.toCharArray()) {
            countX[c - '0']++;
        }

        // Y에서 각 숫자의 개수 세기
        for (char c : Y.toCharArray()) {
            countY[c - '0']++;
        }

        StringBuilder sb = new StringBuilder();

        // 숫자 9부터 0까지 반복
        for (int i = 9; i >= 0; i--) {
            int minCount = Math.min(countX[i], countY[i]); // 짝지을 수 있는 최대 횟수
            for (int j = 0; j < minCount; j++) {
                sb.append(i);
            }
        }

        if (sb.length() == 0) {
            return "-1"; // 짝꿍이 없는 경우
        }

        if (sb.charAt(0) == '0') {
            return "0"; // 결과가 0으로만 구성된 경우
        }

        return sb.toString();
    }
}

코드 설명

  • countX와 countY 배열을 사용하여 X와 Y에서 각 숫자의 개수를 저장
  • 숫자 9부터 0까지 내림차순으로 반복하면서 두 수에서 공통으로 나타나는 숫자를 결과 문자열에 추가
  • Math.min(countX[i], countY[i])를 사용하여 짝지을 수 있는 최대 횟수를 계산
profile
어제의 나보단 나은 오늘의 내가 되기를

0개의 댓글