GitHubSeob

C++ / 프로그래머스 / 숫자 짝꿍 본문

Programmers/Level 1

C++ / 프로그래머스 / 숫자 짝꿍

GitHubSeob 2023. 6. 24.

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제풀이

X와 Y를 탐색하면서 숫자의 개수를 numX, numY 벡터에 저장한다.

numX와 numY를 비교하면서 최솟값을 partner벡터에 넣는다. 이때, 0인 경우는 제외한다.

그다음 partner벡터를 내림차순으로 정렬한다.

비어있으면 -1을, 맨 앞이 0이라면 0을, 나머지 경우는 그대로 return 한다.

 

코드

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string solution(string X, string Y) {
    string answer = "";
    vector<int>numX(10, 0);
    vector<int>numY(10, 0);
    vector<char>partner;
    int idx(0), min_cnt(0);

    for (idx = 0; idx < X.size(); ++idx) {
        numX[X[idx] - '0']++;
    }
    
    for (idx = 0; idx < Y.size(); ++idx) {
        numY[Y[idx] - '0']++;
    }
    
    for (idx = 0; idx <= 9; ++idx) {
        min_cnt = min(numX[idx], numY[idx]);
        while (min_cnt--)
            partner.push_back(idx + '0');
    }

    sort(partner.begin(), partner.end(), greater<>());

    for (idx = 0; idx < partner.size(); ++idx) {
        answer += partner[idx];
    }
    if (answer[0] == '0')
        answer = "0";
    else if (answer.empty())
        answer = "-1";

    return answer;
}