cards1과 cards2 배열을 순서대로 사용해서 goal 배열을 만들 수 있는지 확인하는 문제이다. 각 카드 뭉치는 순서를 바꿀 수 없고, 앞에서부터 순서대로만 사용할 수 있다.
cards1 = ["i", "drink", "water"]
cards2 = ["want", "to"]
goal = ["i", "want", "to", "drink", "water"] → "Yes"
cards1과 cards2를 슬라이스해서 goal을 만드는 문제이다.
goal을 앞에서부터 하나씩 보면서 순서대로 확인한다.
cards1의 맨 앞 단어와 같으면 → cards1에서 소비cards2의 맨 앞 단어와 같으면 → cards2에서 소비"No" 반환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"
구체적으로 정리한 풀이 흐름:
idx1, idx2로 각 카드 뭉치의 현재 위치 추적goal을 앞에서부터 순회cards1[idx1] 또는 cards2[idx2]와 매칭되면 해당 인덱스 증가"No" 반환"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" 반환
}
}