[프로그래머스] 카드 뭉치 - JavaScript

유아현·2023년 4월 26일
0

Coding Test

목록 보기
1/2
post-thumbnail

📌 카드 뭉치

🌱 나의 풀이

function solution(cards1, cards2, goal) {
  /*
  1. 찾을 단어와 카드 뭉치의 제일 앞에 있는 것과 비교해서 찾은 단어라면 소멸
  2. 두 뭉치를 전부 썼으면 조합 가능
  3. goal 외의 글자를 카드 뭉치들이 가졌을 경우가 있으므로 Count를 통해 goal 길이만큼 삭제했는지 확인
  */

  let count = 0;

  for(let i = 0 ; i < goal.length ; i += 1){
    const findWord = goal[i];
    
    if (cards1[0] === findWord) {
      cards1.shift();
      count++;
    }else if(cards2[0] === findWord){
      cards2.shift();
      count++;
    }else {
      return "No"
    }
  }

  return goal.length === count ? "Yes" : "No"
}

solution(["i", "drink", "water"],["want", "to"], ["i", "want", "to", "drink", "water"])

처음에는 카드 뭉치1에서 빼고 카드 뭉치2에서 빼고 왔다갔다 하는 줄 알았는데 한 뭉치에서 연속으로도 뽑을 수 있는 경우를 빼먹고 있었다 😅 그래서 초기에 설정했던 카드 뭉치1과 카드 뭉치2를 순회하던 이중포문을 없애버리고 goal를 순회해야겠다! 생각을 하다가 써버리면... 못 쓴다...? 이거 그냥 shift 해버리면 좋겠는데? 생각했다. 그래서 찾으려고 하는 findWord를 카드 뭉치1, 2에 있으면 없애버리기로 했다. 순서대로 한 장씩 사용한다는 룰이 있었기 때문에 카드 뭉치 1, 2를 findWord와 비교하는 기준을 0번째 인덱스로 잡아 찾았다면 없애게 해 주고, goal 배열 내에 존재하는 단어 외의 다른 단어들이 카드 뭉치에 존재할 수 있는 경우를 고려하여 goal 내 단어들을 찾아낸 횟수인 count 변수를 선언하여 count가 goal의 단어 수와 일치한지 확인하여 해 주었다. 다 풀고 나서 다른 사람들의 풀이를 구경했는데 count 해 줄 필요는 없이 내 마지막 else 문에서 그대로 reture No를 해 주고 있으니 for문을 무사히 돌았다면 전부 찾은 거라 reture Yes를 해줬어도 됐었다! 다들 비슷한 접근을 한 것 같아 신기... 🥹

0개의 댓글