본문 바로가기
Programming Solve/프로그래머스

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

by msm1029 2022. 12. 24.
반응형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

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

programmers.co.kr

 

 

풀이

X에 존재하는 숫자의 개수, Y에 존재하는 숫자를 세서 겹치는 숫자와 그 개수를 파악한다.

앞 자리 수가 클수록 숫자가 커지므로 9부터 0까지 내려가며 answer에 추가해준다.

 

겹치는 숫자가 없으면 -1을, 모두 0이면 0을, 그 외에는 answer를 리턴하면 되는데

이 때 0임을 확인하기 위해 stoi를 사용하면 자릿수가 300만이므로 에러가 발생한다.

따라서, answer가 0인지 확인하려면 맨 앞 자리수만 확인하면 된다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int Xdigit[10] = { 0, };
int Ydigit[10] = { 0, };
int possible[10] = { 0, };

string solution(string X, string Y) {
    string answer = "";
    for(int i=0; i<X.size(); i++) Xdigit[X[i] - '0']++;
    for(int i=0; i<Y.size(); i++) Ydigit[Y[i] - '0']++;
    
    for(int i=0; i<10; i++){
        if(Xdigit[i] != 0 && Ydigit[i] != 0) possible[i] = min(Xdigit[i], Ydigit[i]);
    }
    
    for(int i=9; i>=0; i--){
        while(possible[i] > 0){
            answer += to_string(i);
            possible[i]--;
        }
    }
    
    if(answer.empty()) return "-1";
    //if(stoi(answer) == 0) return "0";
    if(answer[0] == '0') return "0";
    
    return answer;
}
반응형