개발/코딩테스트

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

gomanbo 2024. 3. 4. 22:31
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/159994#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제설명]

코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.카드 뭉치의 단어 순서는 바꿀 수 없습니다.

- 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.

- 한 번 사용한 카드는 다시 사용할 수 없습니다. 

- 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다. 

- 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.

 

[해설]

순서대로 내보내야하고, 순서 변경되면 안되므로 아 큐 문제구나!

goal의 문제와 cards1 or cards2와 같은것을 찾아야 된다는 생각을 했고, 같으면 빼야된다는 생각이 들었다.

궁극적으로 No인 조건을 생각해내지 못했다. 한개씩 차례로 빼서 goal이 빈 값인 경우를 모든 순서대로 card를 사용한 것으로 보면될듯!

 

1. goal의 첫번째 값과 cards1의 첫번째, cards2 첫번째를 비교해

2. cards1, cards2 둘다 있는 경우 사용할 수 있는 카드가 있다면 그 카드에서 빼줘 goal도 빼주고

3. goal이 빈값인 경우 차례로 모든 단어를 사용했다는 의미.

function solution(cards1, cards2, goal) {
  var answer = 'Yes';

  while (goal.length > 0) {
    const card = goal[0];
    if (cards1.length > 0 && card === cards1[0]) {
      cards1.shift();
      goal.shift();
    } else if (cards2.length > 0 && card === cards2[0]) {
      cards2.shift();
      goal.shift();
    } else {
      break;
    }
  }

  return goal.length === 0 ? 'Yes' : 'No';
}
반응형

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

[프로그래머스] 할인 행사  (2) 2024.03.05
[프로그래머스] 방문 길이  (0) 2024.03.03
[프로그래머스] 행렬의 곱셈  (0) 2024.02.24