코린이의 소소한 공부노트

[프로그래머스/Lv.1] 카드 뭉치 본문

코딩테스트 풀이/JAVA

[프로그래머스/Lv.1] 카드 뭉치

무지맘 2023. 2. 20. 23:02

1. Input

1) String[] cards1

2) String[] cards2

3) String[] goal

 

2. Output

1) cards1cards2에 적힌 단어들로 goal를 만들 있다면 "Yes", 만들 수 없다면 "No"를 반환

// 이때, 카드에 적힌 단어 순서대로 goal을 만들 수 있어야 한다.

 

3. Constraint

1) 1 cards1의 길이, cards2의 길이 10

2) 1 cards1[i]의 길이, cards2[i]의 길이 10

3) cards1cards2에는 서로 다른 단어만 존재한다.

4) 2 goal의 길이 cards1의 길이 + cards2의 길이

5) 1 goal[i]의 길이 10

6) goal의 원소는 cards1cards2의 원소들로만 이루어져 있다.

7) cards1, cards2, goal의 문자열들은 모두 알파벳 소문자로만 이루어져 있다.

 

4. Example

Input: cards1=["i", "drink", "water"], cards2=["want", "to"], goal=["i", "want", "to", "drink", "water"] -> Output: "Yes"

Input: cards1=["i", "water", "drink"], cards2=["want", "to"], goal=["i", "want", "to", "drink", "water"] -> Output: "Yes"

- 첫 번째 예시의 경우 cards1 -> 2 -> 2 -> 1 -> 1의 순서대로 단어를 꺼내면 goal을 만들 수 있다.

- 두 번째 예시의 경우 cards1 -> 2 -> 2로 "i want to"까지는 만들 수 있으나 "water""drink"보다 먼저 사용되어야 하기 때문에 해당 문장을 완성시킬 수 없다.

 

5. Code

1) 첫 코드(2023/02/20)

String answer = "Yes";
int p1=0, p2=0;
for(int i=0 ; i<goal.length ; i++){
    if(p1<cards1.length && goal[i].equals(cards1[p1])){
        p1++;
    } else if(p2<cards2.length && goal[i].equals(cards2[p2])){
        p2++;
    } else{
        answer = "No"; break;
    }
}
return answer;