728x90
공통된 숫자를 이용하여 가장 큰 수를 만들어주는 문제이다.
<코드>
string solution(string X, string Y)
{
string answer = "";
vector<int> num(10,0);
vector<char> result;
for(int i=0; i<X.size(); i++) {
num[X[i]-'0']++;
}
for(int i=0; i<Y.size(); i++) {
if(--num[Y[i]-'0'] >= 0) result.push_back(Y[i]);
}
sort(result.begin(), result.end(), greater<char>());
if(result.empty()) return "-1";
for (int i=0; i<result.size(); i++) {
answer += result[i];
}
if(answer[0]=='0') return "0";
return answer;
}
<해석>
- 0~9까지의 숫자표(0으로 채워진 벡터)를 만든다.
- X에 대한 숫자를 +해준다. (visited 개념으로)
- Y에 대한 숫자를 -해준다. 이때, 벡터의 값이 0이상이라면 공통된 숫자라는 의미이기 때문에, result 벡터에 넣어준다.
- result 벡터를 내림차순해주고, result가 empty라면 "-1"를 return 해준다.
- answer에 result를 넣어준다. 이때, 내림차순이 되어있으므로 answer의 맨 앞 값이 0이라면 0으로 된 문자열이라는 것을 의미하므로 "0"을 return 해준다.
- 그게 아니라면 answer을 return 해준다.
728x90
'Algorithm > 백준과 프로그래머스' 카테고리의 다른 글
[C++] 21317.징검다리 건너기 (1) | 2023.11.24 |
---|---|
[C++] 11508. 2+1세일 (0) | 2023.11.16 |
[C++] 11286. 절댓값 힙 (0) | 2023.08.05 |
[C++] 1935. 후위 표기식2 (1) | 2023.07.16 |
[C++] 2164. 카드2 (0) | 2023.07.16 |