https://school.programmers.co.kr/learn/courses/30/lessons/159994
cards1 과 cards2의 인덱스를 따로 선언하고 반복문을 돌려 조건에 따라 equals로 비교한다.
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "Yes";
int first = 0;
int second = 0;
for(int i = 0; i < goal.length; i++) {
//인덱스가 넘어가면 더이상 참조하지 못하게 막아야함
if(first < cards1.length){
if(goal[i].equals(cards1[first])){
first++;
}else if(second < cards2.length){
if(goal[i].equals(cards2[second])){
second++;
}
}else{
answer = "No";
break;
}
}
}
return answer;
}
}
테스트 케이스 4개가 통과하지 못했다. 이유를 생각해보니
1. cards2가 더 클때의 경우를 체크하지 않은것
2. 조건에서 goal의 길이 >= cards1 + cards2
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
String answer = "Yes";
int first = 0;
int second = 0;
for(int i = 0; i < goal.length; i++) {
if(goal[i].equals(cards1[first])){
if(first < cards1.length -1 ){
first++;
}
}else if(goal[i].equals(cards2[second])) {
if(second < cards2.length -1) {
second++;
}
}else{
answer = "No";
break;
}
}
return answer;
}
}
새롭게 배운 것
if( first < cards1.length && goal[i].equals(cards1[first])){
first++;
}else if(second < cards2.length && goal[i].equals(cards2[second])) {
second++;
}
if문에서 & or |을 사용시 조건문을 읽는 순서는 왼쪽에서 오른쪽이다.
first < cards1.length를 먼저 읽고 안맞으면 false된다는 소리다.
이런점을 이용할 필요가 있다.