Level. 1
문제
풀이
#include <string>
#include <vector>
#include <map>
using namespace std;
string solution(string X, string Y) {
string answer = "";
map<char, int> Xmap;
map<char, int> Ymap;
for(int i=0; i<X.size(); i++) Xmap[X[i]]++;
for(int i=0; i<Y.size(); i++) Ymap[Y[i]]++;
for(int i=9; i>=0; i--){
int minVal = min(Xmap[i+'0'], Ymap[i+'0']);
while(minVal > 0){
minVal--;
answer += to_string(i);
}
}
if(answer == "") return "-1";
if(answer[0] == '0') return "0";
return answer;
}
해결과정
- 자료구조 map을 사용해 key값으로 0~9를 주고 문자열에 들어있는 숫자의 개수를 각각 세어주었다.
- answer는 겹치는 숫자중 가장 큰 값이어야 하므로, 9부터 0까지 공통된 숫자를 탐색한다.
- minVal은 공통된 숫자의 개수이다. minVal만큼 해당 숫자를 answer에 추가해 준다.
- 숫자짝꿍이 없을경우 "-1"을, answer가 0으로 시작할 경우 (00, 000,... ) "0"을 리턴한다.
다른 사람 풀이
#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;
}
'Algorithm > Programers - C++' 카테고리의 다른 글
[프로그래머스] 문자열 나누기 (0) | 2023.06.10 |
---|---|
[프로그래머스] 푸드 파이트 대회 - reverse() (0) | 2023.04.16 |
[프로그래머스] 점프와 순간 이동 - 비트연산 (0) | 2023.03.21 |
[프로그래머스] JadenCase 문자열 만들기 / isspace (0) | 2023.03.12 |
[프로그래머스] 행렬의 곱셈 (0) | 2023.03.12 |