[JS] Programmers 159994 카드 뭉치

서연주·2023년 7월 5일
0

Algorithm

목록 보기
14/25

썸네일_제목은 PRGM 159994 카드 뭉치, 부제목은 JavaScript, 분류는 Algorithm

'카드 뭉치'

Programmers '카드 뭉치' 문제 보러가기

풀이 코드

각 카드 뭉치의 순서를 나타내는 포인터를 사용하여 풀이했다.

function solution(cards1, cards2, goal) {
    var answer = "No";
    let point1 = 0, point2 = 0, pointG = 0;
    
    while(true){
        if(pointG === goal.length){
            answer = "Yes";
            break;
        }
        let flag = false;
        if(goal[pointG] === cards1[point1]){
            pointG++; point1++;
            flag = true;
        }
        else if(goal[pointG] === cards2[point2]){
            pointG++; point2++;
            flag = true;
        }
        if(flag === false){
            break;
        }
    }
    return answer;
}

문제를 풀이하다 카드 뭉치 확인 순서가 중요한지에 관한 의문이 들었으나 여기서 카드 뭉치를 확인하는 순서는 중요하지 않다.
문제에 따르면 cards1과 cards2에는 서로 다른 단어만 존재하기 때문이다.
그러나 cards1(ex.["i", "want"])과 cards2(ex.["want", "to", "drink", "water"])에 중복된 단어가 존재한다면, 이 경우에는 코드에 순서를 고려해야한다.

개선하기

*namiezexx@gmail.com 님의 풀이를 참고하였습니다.
1. while문을 for문으로 바꿔서 가독성 개선
여러 flag 활용 부분을 생략하여 가독성을 개선한다
2. 포인터 대신 shift()
*shift()
; 배열에서 첫 번째 요소를 제거하고, 제거된 요소를 반환한다. 원본 배열의 길이가 변한다.
- 빈 배열의 경우 undefined를 반환한다

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

참고 자료

profile
pizz@ttang

0개의 댓글