문제 설명
Connie는 영어 단어가 적힌 두 묶음의 카드를 받았습니다.
Conny는 다음 규칙을 사용하여 카드의 단어에서 원하는 순서로 일련의 단어를 생성할 수 있는지 알고 싶어합니다.
- 선택한 덱에서 원하는 순서대로 카드를 플레이합니다.
- 한 번 사용한 카드는 다시 사용할 수 없습니다.
- 카드를 사용하지 않고는 다음 카드로 이동할 수 없습니다.
- 기존 데크의 어순을 변경할 수 없습니다.
예를 들어 첫 번째 데크에 (“i”, “drink”, “water”)가 순서로 있고 두 번째 데크에 (“want”, “to”)가 (“i”, “when”, ” to “, “drink”, “water”), 첫 번째 데크에서 “i”를 사용한 다음 두 번째 데크에서 “want”와 “to”를 사용한 다음 “drink”와 “water”라는 단어를 순서대로 사용합니다.
두 번째 스택은 모든 단어 시퀀스를 만들 수 있습니다.
문자열 배열 카드1, cards2와 원하는 단어 필드 타겟을 파라미터로 주면, 지도1 및 카드에 적힌 단어로2 목표를 만들 수 있으면 ‘예’를 반환하고 할 수 없으면 ‘아니요’를 반환하는 해결 기능을 완료하세요.
제한
- 1 ≤ 카드 길이1, 카드 길이2 ≤ 10
- 1 ≤ 카드 길이1(i), 카드 길이2(i) ≤ 10
- 지도1 및 cards2에는 다른 단어만 있습니다.
- 2 ≤ 대상 길이 ≤ 카드 길이1 + 카드 길이2
- 1 ≤ 대상 길이(i) ≤ 10
- 목표의 요소는 지도1 및 그것은 cards2의 요소로만 구성됩니다.
- 카드1, 카드2, Goal의 문자열은 모두 소문자입니다.
I/O 예제 카드1cards2goalresult
(“저는 물을 마 십니다”) | (“원한다”) | (“나는 물을 마시고 싶어”) | “예” |
(“나”, “물”, “음료”) | (“원한다”) | (“나는 물을 마시고 싶어”) | “아니요” |
I/O 예시 설명
I/O 예제 #1
텍스트와 동일합니다.
I/O 예제 #2
maps1에서 “i”를 사용하고 cards2에서는 “i want to”와 함께 “want”와 “to”를 사용할 수 있지만 “drink” 앞에 “water”를 사용해야 하므로 문장을 완성할 수 없습니다.
따라서 “아니오”를 반환합니다.
간단한 접근으로 쉽게 풀 수 있는 문제였습니다.
이 문제는 대상 배열의 cards1과 cards2의 인덱스를 순차적으로 늘려가며 비교할 수 있는 문제입니다.
class Solution {
public String solution(String() cards1, String() cards2, String() goal) {
String answer = "Yes";
int a = 0;
int b = 0;
for(int i=0; i<goal.length; i++){
if(a < cards1.length && cards1(a).equals(goal(i))){
a ++;
}else if(b < cards2.length && cards2(b).equals(goal(i))){
b ++;
}else answer="No";
}
return answer;
}
}
위의 솔루션을 고려하면 대상의 인덱스가 1씩 증가하면 card1 또는 card2의 인덱스가 1씩 증가합니다.
목표는 목표가 1 증가할 때 카드1 또는 카드2가 1씩 증가하는 방식입니다.
문제의 핵심은 이 세 가지 어레이를 “순서대로” 꺼내야 한다는 것입니다.
배열을 순차적으로 증가시킬 때, cards1과 cards2의 두 인덱스가 목표와 같지 않다면 대답을 no로 변경하십시오.
문제가 될거야