[3주차 기본문제 2] 카드 뭉치

BossTeemo·2024년 7월 4일
0

알고리즘스터디

목록 보기
9/19
post-thumbnail
post-custom-banner

문제 설명

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

  1. 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.
  2. 한 번 사용한 카드는 다시 사용할 수 없습니다.
  3. 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.
  4. 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.

예를 들어, 첫 번째 카드 뭉치에 순서대로
["i", "drink", "water"],

두 번째 카드 뭉치에 순서대로
["want", "to"]가 적혀있을 때

["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들고자 한다면,

첫 번째 카드 뭉치에서 "i"를 사용한 후
두 번째 카드 뭉치에서 "want"와 "to"를 사용하고
첫 번째 카드 뭉치에 "drink"와 "water"를 차례대로 사용하면 원하는 순서의 단어 배열을 만들 수 있습니다.


문제 해결 방법

주어진 카드 뭉치(cards1cards2)에서 순서대로 카드를 사용하여 목표 단어 배열(goal)을 만들 수 있는지 확인하는 문제입니다.
각 카드는 한 번만 사용할 수 있으며, 카드 뭉치의 순서를 바꿀 수 없다는 점에 유의해야 합니다.

해결 전략

  1. goal 배열을 순회하면서 각 단어가 cards1의 첫 번째 단어인지 또는 cards2의 첫 번째 단어인지를 확인합니다.
  2. 해당 단어가 cards1의 첫 번째 단어라면 cards1에서 그 단어를 제거하고, cards2의 첫 번째 단어라면 cards2에서 그 단어를 제거합니다.
  3. 만약 goal 배열의 단어가 cards1cards2 모두의 첫 번째 단어가 아니라면, 목표 배열을 만들 수 없는 것으로 간주하고 "No"를 반환합니다.
  4. 모든 단어가 올바르게 사용되었다면 "Yes"를 반환합니다.

코드 구현

위 전략을 바탕으로 코드로 구현해 보겠습니다.

function solution(cards1, cards2, goal) {
    let index1 = 0; // cards1의 인덱스
    let index2 = 0; // cards2의 인덱스

    for (let word of goal) {
        if (index1 < cards1.length && cards1[index1] === word) {
            index1++;
        } else if (index2 < cards2.length && cards2[index2] === word) {
            index2++;
        } else {
            return "No";
        }
    }
    return "Yes";
}

예시

  1. 입력 예시 1

    console.log(solution(["i", "drink", "water"], ["want", "to"], ["i", "want", "to", "drink", "water"])); // "Yes"
  2. 입력 예시 2

    console.log(solution(["i", "water", "drink"], ["want", "to"], ["i", "want", "to", "drink", "water"])); // "No"

상세 설명

  1. index1index2 변수를 사용하여 cards1cards2의 현재 위치를 추적합니다.
  2. goal 배열의 각 단어에 대해, 현재 단어가 cards1의 현재 위치 단어와 일치하면 index1을 증가시키고, cards2의 현재 위치 단어와 일치하면 index2를 증가시킵니다.
  3. 만약 현재 단어가 cards1cards2 모두의 현재 위치 단어와 일치하지 않으면 "No"를 반환합니다.
  4. 모든 단어가 일치하면 "Yes"를 반환합니다.

결론

이 문제는 카드 뭉치에서 주어진 순서대로 단어를 사용하여 목표 단어 배열을 만들 수 있는지 확인하는 문제입니다. 코딩 테스트에서 자주 출제되는 유형으로, 순서와 조건을 잘 파악하고 해결하는 연습이 필요합니다. 이 문제를 통해 배열과 인덱스를 활용하는 방법, 조건문을 통한 로직 구현 방법을 익힐 수 있습니다.

profile
1인개발자가 되겠다
post-custom-banner

0개의 댓글