(Java)프로그래머스 - 카드 뭉치

윤준혁·2024년 2월 27일

나의 풀이

import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        String answer = "Yes";
        ArrayList<String> list1 = new ArrayList<>(); // 1
        ArrayList<String> list2 = new ArrayList<>();
        
        for (String i : cards1) list1.add(i);
        for (String i : cards2) list2.add(i);
        
        int x = 0; // 2
        int y = 0;
        
        for (int i = 0; i < goal.length; i++) { // 3
            if (x < list1.size() && goal[i].equals(list1.get(x))) { // 4
                x++;
            } else if (y < list2.size() && goal[i].equals(list2.get(y))) { // 5
                y++;
            } else { // 6
                answer = "No";
                break;
            }
        }
        
        return answer;
    }
}

과정

  1. cards1과 cards2를 담을 ArrayList list1과 list2를 만들어주고 cards1, cards2를 각각 list1과 list2에 담는다.
  2. list1과 list2의 크기와 비교할 정수 x, y를 선언한다
  3. goal의 크기만큼 for문을 돌리고
  4. 만약 x가 list1의 크기보다 작고, goal[i]번째와 list1(x)번째가 같으면 x++
  5. 아니면 y가 list2의 크기보다 작고, gaol[i]번째와 list2(y)번째가 같으면 y++
  6. 둘 다 해당되지 않는다면 초기에 설정한 answer = "Yes"를 "No"로 바꿔준다

다른 사람 풀이

import java.io.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        int cardIdx1 = 0;
        int cardIdx2 = 0;

        for(int i=0; i<goal.length; i++){
            String target = goal[i];

            if(cardIdx1 < cards1.length && target.equals(cards1[cardIdx1]))
                cardIdx1 ++;
            else if (cardIdx2 < cards2.length && target.equals(cards2[cardIdx2]))
                cardIdx2++;
            else
                return "No";
        }


        return "Yes";
    }
}
  • 괜히 ArrayList로 바꿔줘서 풀었네요 그냥 cards1, 2와 비교해도 되네요

0개의 댓글