알고리즘/프로그래머스

Programers 카드 뭉치 / C++, Java

내이름은 킹햄찌 2023. 2. 19. 21:14

https://school.programmers.co.kr/learn/courses/30/lessons/159994?language=cpp 

 

프로그래머스

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

programmers.co.kr

아이디어

goal을 순회하며 cards1, cards2에 매칭되는 단어가 있는지 확인하고 존재한다면 각각의 cards를 나타내는 포지션 변수를 증가시키고 그렇지 않다면 지나가는 과정을 반복한다. 반복과정의 시작과 종료지점의 cards를 나타내는 포지션 변수의 합을 비교하여 증가하지 않았다면 카트가 존재하지 않는 것으로 판단한다.

 

C++

#include <string>
#include <vector>

using namespace std;

string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
    string answer = "Yes";
    int p1 = 0, p2 =0;
    for(auto iter : goal){
        int total = p1+p2;        
        if(iter == cards1[p1])
            p1++;
        else if(iter == cards2[p2])
            p2++;
        if(total == p1+p2){
            answer = "No";
            break;
        }
    }
    return answer;
}

 

Java 

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        String answer = "Yes";
        int pos1 = 0, pos2 = 0;
        for (String s : goal) {
            int total = pos1+pos2;
            if(cards1.length > pos1 && s.equals(cards1[pos1]))
                pos1++;
            else if(cards2.length > pos2 && s.equals(cards2[pos2]))
                pos2++;
            if(total == pos1+pos2)
                return "No";            

        }
        return answer;
    }
}