문제

문제 해석
1. goal에서 한 개씩 비교하면서 cards1과 cards2의 것을 인덱스를 증가시키면서 확인한다.
2. goal의 원소를 가리키는 인덱스가 최대치인 경우는 인덱스를 초과하여 일치한 것이므로 전부 일치로 간주해서 Yes를 반환한다.
3. 아닌 경우를 나타내는 변수를 하나 둬서 실패 조건에 해당하는 경우 No를 반환하게 한다.
3-1. 실패 1 : cards1과 cards2를 각각 나타내는 인덱스가 해당 카드뭉치보다 커지는 경우 실패
3-2. 실패 2 : 둘다 일치하지 않는 경우는 실패
코드
#include <string>
#include <vector>
using namespace std;
string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
size_t Card1CurrentIDX = 0;
size_t Card2CurrentIDX = 0;
size_t GoalMax = goal.size();
size_t Card1Max = cards1.size();
size_t Card2Max = cards2.size();
bool bNeedContinue = false;
size_t CurrentGoalIDX = 0;
while(CurrentGoalIDX != GoalMax)
{
bNeedContinue = false;
if(Card1CurrentIDX < Card1Max && goal[CurrentGoalIDX] == cards1[Card1CurrentIDX])
{
Card1CurrentIDX++;
CurrentGoalIDX++;
bNeedContinue = true;
}
else if(Card2CurrentIDX < Card2Max && goal[CurrentGoalIDX] == cards2[Card2CurrentIDX])
{
Card2CurrentIDX++;
CurrentGoalIDX++;
bNeedContinue = true;
}
if(bNeedContinue)
{
if(CurrentGoalIDX == GoalMax)
{
return "Yes";
}
}
else
{
return "No";
}
}
}
다른 사람의 풀이
1. 참조를 활용한 풀이