https://school.programmers.co.kr/learn/courses/30/lessons/131128
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
string solution(string X, string Y) {
string answer = "";
vector<int> a(10,0);
vector<int> b(10,0);
for(int i=0;i<X.length();i++)
{
a[X[i]-'0']++;
}
for(int i=0;i<Y.length();i++)
{
b[Y[i]-'0']++;
}
for(int i=9;i>=0;i--)
{
if(a[i]>=1&&b[i]>=1)
{
int j = (a[i]>b[i])?b[i]:a[i];
for(int k=0;k<j;k++)
answer+=i+'0';
}
}
if(answer=="")return "-1";
for(int i=0;i<answer.length();i++)
{
if(answer[i]!='0')return answer;
}
return "0";
}
두 숫자로된 문자열에서 같은 숫자로 매칭되는 수는 짝꿍이 된다.
ex) a = "1313" , b = "3512" 면
각 문자열에 1이 하나씩 있고 3이 하나씩 있기 때문에 1과 3은 짝꿍이 되고 a의 나머지 1과3은 b에 없기 때문에 짝꿍이 될 수 없다.
따라서 짝꿍인 수들로 만들 수 있는 가장 큰 수인 31이 답이 된다.
예외조건은 짝꿍이 0만 있다면 0을 리턴, 짝이 없다면 -1을리턴한다.
그래서 크기가 10인 벡터 두개를 만들어 각 문자열에 숫자들이 몇개씩 있는지 파악한다.
그리고
for(int i=9;i>=0;i--)
{
if(a[i]>=1&&b[i]>=1)
{
int j = (a[i]>b[i])?b[i]:a[i];
for(int k=0;k<j;k++)
answer+=i+'0';
}
}
여기서 짝을 가지고 가장 큰수를 만들게 된다.
가장큰수를 만들어야하기때문에 9부터 짝꿍이 있는지 확인한다. 둘다 1이상이면 짝이 있다는 뜻이므로
둘 중 더 작은 수에 대해서 for문을 돌며 answer에 숫자를 추가한다.
마지막으로 예외사항을 처리하기위해 return하는 조건을 붙였다.
'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 - 개인정보 수집 유효기간 - C++ (3) | 2024.07.22 |
---|---|
프로그래머스 - 둘만의 암호 - C++ (1) | 2024.07.22 |
프로그래머스 - 소수찾기 - C++ (0) | 2024.07.18 |
프로그래머스 - 소수 만들기 - C++ (0) | 2024.07.18 |
프로그래머스 - 기사단원의 무기 - C++ (0) | 2024.07.18 |