프로그래머스 : 카드 뭉치

Digeut·2023년 9월 28일
0

프로그래머스

목록 보기
101/164

❔문제설명

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

원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.
한 번 사용한 카드는 다시 사용할 수 없습니다.
카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.
기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.
예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다면 첫 번째 카드 뭉치에서 "i"를 사용한 후 두 번째 카드 뭉치에서 "want"와 "to"를 사용하고 첫 번째 카드뭉치에 "drink"와 "water"를 차례대로 사용하면 원하는 순서의 단어 배열을 만들 수 있습니다.

문자열로 이루어진 배열 cards1, cards2와 원하는 단어 배열 goal이 매개변수로 주어질 때, cards1과 cards2에 적힌 단어들로 goal를 만들 있다면 "Yes"를, 만들 수 없다면 "No"를 return하는 solution 함수를 완성해주세요.

🤔아이디어

for문을 통해서 각각 card1과 card2 배열속의 값들이 goal배열안의 값과 동일한지 비교하면 되지 않을까. 같다면 계속해서 비교를 진행하고, 다르다면 나와서 answer에 No를 출력하면 될것같다.

💡코드풀이

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        String answer = "Yes";
        
        int cards1Index = 0;
        int cards2Index = 0;
        
        for(int i = 0 ; i < goal.length ; i++){
            if(cards1Index < cards1.length && goal[i].equals(cards1[cards1Index])){
                cards1Index++;
                continue;
            }
            
            if(cards2Index < cards2.length && goal[i].equals(cards2[cards2Index])){
                cards2Index++;
                continue;
            }
            
            answer = "No";
            return answer;
        }
        
        return answer;
    }
}

처음 반복문을 돌릴때 card1과 card2의 인덱스 값을 정하지 않고 for문 내의 i값으로 통일해서 비교를 했는데 비교값이 제대로 비교가 되지않았다. 검색을 통해 알아보니 각각의 배열 인덱스 값이 일치하지 않는 경우가 있어서 정확도가 떨어진고 했다. 그래서 정확한 비교를 위해 card인덱스와 goal인덱스의 정확도를 위해서 비교를 마친후에 Index++를 해주는 방향으로 수정했다.

profile
개발자가 될 거야!

0개의 댓글