코딩테스트: Lv - 1 카드 뭉치

박상하·2024년 8월 8일
0

코딩테스트

목록 보기
37/37


첫 번째 시도

문제를 보고 dfs, 재귀 등을 떠올렸다.

왜냐하면 cards1, cards2 모두 어떤 카드덱(?)에서 먼저 뽑냐에 따라 결과가 달라질 것이라 생각했기 때문이다.

그런데 문제가 이상하게 어려웠다. 분명 lv - 1 인데 왜 이렇게 어렵지..

문제 제대로 읽기 ;;

문제에 보면 제한사항중 각 카드에는 서로 다른 카드만 존재한다고 나와있다.
즉, cards1, cards2 중 어떤걸 먼저 뽑느냐가 중요한게 아니라

있기만 하면 있는대로 뽑기만 하면되는 쉬운 문제였다.

그런데 나는 순서가 중요하다라고 가정하고 문제를 해결했다..

function solution(cards1, cards2, goal) {
  let result ="No"
  const dfs=(cards1,cards2,cardsIndex1,cardsIndex2,goalIndex)=>{
    if(result==="Yes"){
        return;
    } 
    if(goalIndex===goal.length){
        result="Yes"
        return;
    } 
    if(cardsIndex1===cards1.length&&cardsIndex2===cards2.length){
        return;
    }  
      if(cards1[cardsIndex1]===goal[goalIndex]){
          dfs(cards1,cards2,cardsIndex1+1,cardsIndex2,goalIndex+1)
      }
      if(cards2[cardsIndex2]===goal[goalIndex]){
          dfs(cards1,cards2,cardsIndex1,cardsIndex2+1,goalIndex+1)
      }   
  }
    dfs(cards1,cards2,0,0,0)
    
    return result
}

결과: 통과

dfs로 문제를 해결했다. 문제를 잘 읽어야한다..
그래도 오랜만에 dfs를 사용해 볼 수 있어 좋았다.

dfs의 핵심은 지금 상태를 기억하는 거 같다. 매개변수를 잘 활용해야한다.

두 번째 시도

제한을 제대로 읽었다면

function solution(cards1, cards2, goal) {
    for(let i = 0 ; i<goal.length; i++){
        const target = goal[i]
        if(cards1.length>0&&cards1[0]===target){
            cards1.shift()
        }
        else if(cards2.length>0&&cards2[0]===target){
            cards2.shift()
        }
        else{
            return "No"
        }
    }
    return "Yes"
    
}

이런식으로 간단하게 해결해 줄 수 있다.

결과: 통과

0개의 댓글