Algorithm/백준과 프로그래머스

[C++] 숫자짝궁

young_3060 2023. 11. 14. 16:13
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;
}

 

<해석>

  1.  0~9까지의 숫자표(0으로 채워진 벡터)를 만든다.
  2. X에 대한 숫자를 +해준다. (visited 개념으로)
  3. Y에 대한 숫자를 -해준다. 이때, 벡터의 값이 0이상이라면 공통된 숫자라는 의미이기 때문에, result 벡터에 넣어준다.
  4. result 벡터를 내림차순해주고, result가 empty라면 "-1"를 return 해준다.
  5. answer에 result를 넣어준다. 이때, 내림차순이 되어있으므로 answer의 맨 앞 값이 0이라면 0으로 된 문자열이라는 것을 의미하므로 "0"을 return 해준다.
  6. 그게 아니라면 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