본문 바로가기
기초다지기/JS 코딩테스트

javaScript 두 배열에서 주어진 목표 배열을 만들 수 있는지 검사

by 김빵그 2023. 12. 19.

문제 

영어단어가 적힌 카드 뭉치 두 개를 이용하여 순서대로 단어 배열을 사용해 goal을 만들수 있는지 확인

풀이 

function solution(cards1, cards2, goal) {
    let index1 = 0;
    let index2 = 0;

    for (let i = 0; i < goal.length; i++) {
        if (index1 < cards1.length && cards1[index1] === goal[i]) {
            index1++;
        } else if (index2 < cards2.length && cards2[index2] === goal[i]) {
            index2++;
        } else {
            return "No";
        }
    }
    return "Yes"
}
  • index1, index2 : 각각 cards1 과 cards2에서 현재 사용중인 카드의 인덱스를 나타냄 
  • for 
    • goal 배열의 각 요소를 순서대로 검사
    • 현재 goal 배열과 card1 또는 cars2에서 가져온 카드 값이 일치하는지 확인
    • 일치하면 index1을 증가시켜 다음 카드로 이동 / 일치하면 index2 증가시켜 이동
    • 어느쪽의 카드에서도 찾을수 없다면 "No" 

다른풀이

function solution(cards1, cards2, goal) {

    for(const s of goal) {

        if(cards1[0] == s) {
            cards1.shift();
        } else if(cards2[0] == s) {
            cards2.shift();
        } else {
            return "No"
        }
    }

    return "Yes";
}
  • for of 를 사용하여 반복 가능한 배열을 반복하고 각 속성 값에 대해 실행되는 문
  • shift : 배열에서 첫 번째 요소를 제거하고 제거 된 요소를 반환
function solution(cards1, cards2, goal) {
    let j = 0;
    let k = 0;
    for(let i=0;i<goal.length;i++){
        if(goal[i] == cards1[j]) j++;
        else if(goal[i] == cards2[k]) k++;
        else return "No"
    }
    return "Yes";
}

function solution(cards1, cards2, goal) {
    for(let v of goal) {
        if(cards1.includes(v)){
            if(cards1.shift() !== v){
                return "No";
            }
        }else{
            if(cards2.shift() !== v){
                return "No";
            }
        }
    }
    return "Yes";
}