본문 바로가기
코딩테스트

(javaScript) 카드뭉치

by 어뇨 2024. 2. 19.

 

function solution(cards1, cards2, goal) {
    let count = 0;
    for(let i = 0 ; i < goal.length ; i++){
        if(cards1[0] === goal[i]){
            cards1.splice(0, 1)
            count++
        } else if(cards2[0] === goal[i]){
            cards2.splice(0, 1)
            count++
        }else{
            return "No" 
        }
    }
    return count === goal.length ? "Yes" : "No"
}

 

goal이란 배열의 0번째 인덱스 부터 시작해서 마지막 인덱스까지의 각각의 단어를 cards1, cards2에서 찾아서 순서에 맞게 되는지 알아보는문제다.

요소 하나하나를 반복해야하기때문에 for문을 썼고 if else를 사용해서 조건을 찾게끔 헀다.

cards1[0]이 goal[i]라면 cards1의 0번째 인덱스를 없애고 count에 1을더한다.

count에 1씩 더하는 이유는 마지막에 설명하겠다.

그게 아니라면 cards2[0]가 goal[i]인지, 맞다면 0번째 인덱스를 없애고 역시 count에 1을 더하고

둘다 아니라면 No를 리턴하게했다.

count에 1을 더하는 이유는 만약 count가 goal.length 보다 작게나오면 그건 한번이라도 단어를 못찾은거기때문에 조건에 맞다면 count에 1을 더하는식으로 했다 .

 

다른사람의 풀이

 

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";
}

 

이거 보고 생각든게 마지막 return에 어차피 count가 goal의 길이가 다르단건 if else문에서 return "No"를 한다는건데 

삼항연산자를 쓸 필요가 없었다는것, 그리고 난 splice를 써서 0번째 인덱스를 추출하는식으로 했는데 j, k 값을둬서 인덱스값을 하나씩 올리는식으로 할 수 있구나 라고 느꼈다.

'코딩테스트' 카테고리의 다른 글

(javascript) 모의고사  (1) 2024.02.26
(javascript) 과일장수  (0) 2024.02.22
(javaScript) 2016년  (0) 2024.02.18
(javaScript) 명예의전당(1)  (0) 2024.02.16
(javaScript) 가장 가까운 같은 글자  (0) 2024.02.13