프로그래머스/1레벨

카드 뭉치/C++

Koalitsiya 2023. 2. 28. 12:03
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 조건

  • cards1, cards2에 들어있는 단어들로 goal을 만들 수 있으면 Yes, 아니면 No 리턴
  • 각 배열에 들어있는 단어들은 배열 내의 순서대로만 사용 가능
  • 특정 카드를 사용하지 않고 넘어가는 것은 불가능

 

풀이 방법

  1. 각 배열에서 단어가 얼마만큼 사용됐는지 판별하기 위한 index1, index2 선언
  2. goal 배열을 범위 기반 for문을 돌려 카드 배열의 index 번째의 문자열이 str과 일치하고 index가 카드 배열의 크기보다 작으면 해당 index를 증가시킨다. 
  3. 두 개의 배열 모두 조건을 만족시키지 않는다면 goal을 만들 수 없으므로 No를 리턴한다.
  4. goal의 끝까지 조건을 모두 만족 시켰다면 goal을 만들 수 있으므로 Yes를 리턴한다.
#include <string>
#include <vector>

using namespace std;

string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
    string answer = "Yes";
    int index1, index2 = 0;
    
    for(auto& str : goal) {
        if(cards1[index1] == str && cards1.size() > index1)
            index1++;
        else if(cards2[index2] == str && cards2.size() > index2)
            index2++;
        else {
            answer = "No";
            break;
        }
    }
    
    return answer;
}