병아리의 코딩 일기

[JS] 프로그래머스 Lv 1. 카드뭉치 (풀이) 본문

코딩테스트 Coding Test/프로그래머스

[JS] 프로그래머스 Lv 1. 카드뭉치 (풀이)

oilater 2023. 5. 7. 23:02

 

내 풀이 (통과)

function solution(cards1, cards2, goal) {
  const length = goal.length;

  for (let i = 0; i < length; i++) {
    if (goal[0] === cards1[0]) {
      goal.shift();
      cards1.shift();
    }

    if (goal[0] === cards2[0]) {
      goal.shift();
      cards2.shift();
    }
  }

  if (goal[0] === undefined) {
    return "Yes";
  }

  return "No";
}

goal과 cards 의 0번 인덱스를 비교하고 지우고를 반복하면 된다.

다른 사람들은 이 방법을 for of 문을 이용해서 더 쉽게 짰다. 나도 for of 잘 쓰고 싶어..

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

 


난 처음엔 아래 코드와 같이 indexOf 로 접근했다.

function solution(cards1, cards2, goal) {
  for (let i = 0; i < cards1.length - 1; i++) {
    if (goal.indexOf(cards1[i]) > goal.indexOf(cards1[i + 1])) {
      return "No";
    }
  }

  for (let i = 0; i < cards2.length - 1; i++) {
    if (goal.indexOf(cards2[i]) > goal.indexOf(cards2[i + 1])) {
      return "No";
    }
  }

  return "Yes";
}

이렇게도 해보고,,

function solution(cards1, cards2, goal) {
  let arr = [];
  let arr2 = [];
  let index1 = 0;
  let index2 = 0;

  for (let i = 0; i < cards1.length; i++) {
    for (let j = 0; j < goal.length; j++) {
      if (cards1[i] === goal[j]) {
        index1 = goal.indexOf(cards1[i]);
        arr.push(index1);
      }
    }
  }

  for (let i = 0; i < cards2.length; i++) {
    for (let j = 0; j < goal.length; j++) {
      if (cards2[i] === goal[j]) {
        index2 = goal.indexOf(cards2[i]);
        arr2.push(index2);
      }
    }
  }

  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i] > arr[i + 1]) {
      return "No";
    }
  }

  for (let i = 0; i < arr2.length - 1; i++) {
    if (arr2[i] > arr2[i + 1]) {
      return "No";
    }
  }

  return "Yes";
}

 

이렇게 써보니 테스트 케이스 25번만 실패를 했는데,

문제의 조건 중 '카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.' 에 걸렸다.

아예 방법을 바꿔버리자 하고 차근 차근 생각했는데 결국 통과되었다.

 

이번 문제를 풀면서

코딩테스트를 잘 풀기 위해서는 

애초에 논리적으로 생각을 잘 하는 것이 중요하다는 걸 느꼈다.

논리적인 생각을 코드로 옮기면 되니까,,!!

그게 어렵지만 말이다 ㅋㅎㅋ

 

쨋든 다음 문제로 넘어가보자!

 

궁금한 점이나 코멘트 환영합니다. :)

 

 

728x90
반응형
LIST