set
를 사용해서 존재하는 숫자를 표시하고 해당 숫자가 존재하면 짝궁이 있다고 판단해 string
에 추가하는 방식을 생각했으나, 존재여부를 판단하는 것이 아니라 짝궁을 만들어 주는 것이기 때문에 set
를 사용하는 방법은 적합하지 않음
string
으로 변환해 추가해줌X를 기준으로 탐색할 때, Y를 기준으로 탐색할 때를 나누어 코드를 짜면 중복되는 코드가 너무 많아서 비효율적이라고 생각함
마지막에 최대값을 산출하기 위해 sort
로 내림차순 정렬한 것도 대체할 방법이 필요함
set
를 사용하는 방법은 실패했지만 더 간결하고 효율적인 방법으로 대체하는 것이 필요함
map
사용
X의 문자에 대한 map
과 Y의 문자에 대한 map
을 나눠서 map<char,int> m
형태로 저장
➡️ char
에는 특정 문자, int
에는 문자열에서 해당 문자가 등장한 횟수를 저장
최대값을 산출해야하기 때문에 9에서 시작해서 0까지 같은 key 값에 대해 몇 개를 갖고 있는지 계산해서 그만큼 해당 숫자를 answer에 저장
int num=min(mx[i+'0'],my[i+'0']);
➡️ 같은 key 값의 최소값이 숫자로 짝궁을 만들 수 있는 최소값
➡️ 숫자에 '0'
을 더하면 char
형으로 변환 가능
#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(string X, string Y)
{
string answer="";
map<char,int> mx;
for(char c : X) mx[c]++;
map<char,int> my;
for(char c : Y) my[c]++;
for(int i=9; i>=0; i--)
{
int num=min(mx[i+'0'],my[i+'0']);
for(int j=0; j<num; j++) answer+=i+'0';
}
if(answer=="") answer="-1";
else if(answer[0]=='0' && answer.size()>1) answer="0";
return answer;
}