코딩테스트

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

mhui123 2025. 4. 2. 18:21
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

주어진 X, Y는 정수형태로 된 문자열이며, X 와 Y에 공통으로 등장하는 개수만큼 숫자를 사용하여 만들 수 있는 최대값을 반환하는 문제이다.

제한사항

* 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
* X, Y는 0으로 시작하지 않습니다.
* X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

접근

X Y 각각 0 ~ 9 까지의 숫자 갯수를 세고 int[10]에 담은 후 각 숫자별로 공통으로 갖고 있는 숫자를 갯수만큼 사용하여 answer에 붙여 반환한다.
public String solution(String X, String Y) {
        int[] xCnt = new int[10];
        int[] yCnt = new int[10];

        for( char c : X.toCharArray()){
            xCnt[c - '0'] ++;
        }
        for( char c : Y.toCharArray()){
            yCnt[c - '0'] ++;
        }

        StringBuilder answer = new StringBuilder();
        
		//최대값 생성 : 9 ~ 0 까지 붙이기
        for(int num = 9; num >= 0; num --){
            int v = Math.min(xCnt[num], yCnt[num]); // X Y 에 존재하는 num의 갯수
            //존재하지 않는 수는 연산되지 않음
//            for( int i = 0; i < v; i ++){
//                answer.append(num);
//            }
            answer.append(String.valueOf(num).repeat(Math.max(0, v)));//num을 0 과 v값 중 큰 값만큼 반복해 부착.
        }

        //예외처리
        if(answer.length() == 0){
            answer = new StringBuilder("-1");
        } else if(answer.charAt(0) == '0') {
            answer = new StringBuilder("0");
        }

        return answer.toString();
    }

알게된 점

1. char 끼리의 연산 결과는 askii 코드로 계산되어 정수값이다.
ex) char c = '9'; // 57
xCnt[ c - '0' ] -> xCnt[9]

2. StringBuilder a.append("x").repeat(v) 는 "x"를 a 에 v회만큼 붙인다.
반응형