https://school.programmers.co.kr/learn/courses/30/lessons/159994

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

 

 

나의 풀이
- goal에 있는 단어를 cards1과 cards2의 첫번째 글자와 각각 비교한다.
- 비교했을 때 둘 다 없으면 No를 바로 반환해버린다.
- 있으면 있는 쪽의 0번째 단어를 삭제한다.

이렇게 비교하면 순차적으로 비교할 수 있으면서 깔끔하게 코드를 작성할 수 있을 것 같아 이렇게 로직을 설계하였다.

 

내 코드
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
    for (int i = 0; i < goal.size(); i++)
    {
        if (cards1.size() > 0 && goal[i] == cards1[0])
            cards1.erase(remove(cards1.begin(), cards1.end(), goal[i]));
        else if (cards2.size() > 0 && goal[i] == cards2[0])
            cards2.erase(remove(cards2.begin(), cards2.end(), goal[i]));
        else
            return "No";
    }
    
    return "Yes";
}

 

 

remove와 erase를 같이 쓴 이유

remove와 erase를 다룬 게시물 첨부 예정