프로그래머스 - 카드뭉치

윤민선·2026년 7월 31일

프로그래머스

목록 보기
57/71

문제 설명

cards1cards2 배열을 순서대로 사용해서 goal 배열을 만들 수 있는지 확인하는 문제이다. 각 카드 뭉치는 순서를 바꿀 수 없고, 앞에서부터 순서대로만 사용할 수 있다.

cards1 = ["i", "drink", "water"]
cards2 = ["want", "to"]
goal   = ["i", "want", "to", "drink", "water"] → "Yes"

접근 방법

cards1cards2를 슬라이스해서 goal을 만드는 문제이다.

goal을 앞에서부터 하나씩 보면서 순서대로 확인한다.

  1. cards1의 맨 앞 단어와 같으면 → cards1에서 소비
  2. cards2의 맨 앞 단어와 같으면 → cards2에서 소비
  3. 둘 다 아니면 → "No" 반환
  4. goal을 다 소비하면 → "Yes" 반환

각 카드 뭉치의 현재 위치를 인덱스로 추적 한다.

int idx1 = 0;  // cards1 현재 위치
int idx2 = 0;  // cards2 현재 위치

예시로 흐름을 확인하면 아래와 같다.

goal = ["i", "want", "to", "drink", "water"]

"i"     → cards1[0] = "i"    매칭 ✅ → idx1=1
"want"  → cards2[0] = "want" 매칭 ✅ → idx2=1
"to"    → cards2[1] = "to"   매칭 ✅ → idx2=2
"drink" → cards1[1] = "drink"매칭 ✅ → idx1=2
"water" → cards1[2] = "water"매칭 ✅ → idx1=3

goal 다 소비 → "Yes"

구체적으로 정리한 풀이 흐름:

  1. idx1, idx2로 각 카드 뭉치의 현재 위치 추적
  2. goal을 앞에서부터 순회
  3. cards1[idx1] 또는 cards2[idx2]와 매칭되면 해당 인덱스 증가
  4. 둘 다 매칭 안 되면 즉시 "No" 반환
  5. 순회 완료 시 "Yes" 반환

최종 코드

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        int idx1 = 0, idx2 = 0;

        for (String word : goal) {
            if (idx1 < cards1.length && cards1[idx1].equals(word)) {
                idx1++; // cards1의 현재 위치 단어가 word와 같은지 확인 
            } else if (idx2 < cards2.length && cards2[idx2].equals(word)) {
                idx2++; // cards1에서 못찾으면 cards2에서 찾아봄
            } else {
                return "No"; // cards1과 cards2 둘다 못찾으면 "NO" 반환
            }
        }

        return "Yes"; // goal을 끝까지 소비하면 "Yes" 반환 
    }
}

0개의 댓글