본문 바로가기

개발지/코테

[프로그래머스] 코테연습 - 카드 뭉치(lv.1)

- 내 방법 풀이

  • 문제를 보고 처음에 리스트로 만들어서 풀 생각을 했다.
    반복문을 사용하여, cards1,2를 번갈아가며 리스트 하나에 포함시켜 goal과 비교하려 했다.
    하지만 카드 뭉치 2에서 연속하여 단어 2개를 사용할 수 있어 맞지 않는 코드였다.
  • 이후 cards1, 2를 각각 리스트로 만들어 goalList와 비교하며 0인덱스항을 삭제시켜 비교하는 방법으로 변경했다.
    list의 사이즈가 남아 있을 때를 고려해주지 않아서 조건문에 list사이즈를 추가해서 정답에 도달했다.
import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        ArrayList<String> goalList = new ArrayList<>(Arrays.asList(goal));
        ArrayList<String> cards1List = new ArrayList<>(Arrays.asList(cards1));
        ArrayList<String> cards2List = new ArrayList<>(Arrays.asList(cards2));
        
        while (goalList.size()>0) {
            if (cards1List.size() > 0 && goalList.get(0).equals(cards1List.get(0))) {
                goalList.remove(0);
                cards1List.remove(0);
            }
            else if (cards2List.size() > 0 && goalList.get(0).equals(cards2List.get(0))) {
                goalList.remove(0);
                cards2List.remove(0);
            }
            else return "No";
        }
        return "Yes";
    }
}

 

 

- 다른 사람 방법 풀이

  • cards1,2의 인덱스를 따로 설정하여 리스트로 만들지 않고 goal과 비교한 정답이 있었다.
  • 리스트를 사용하여 푼 풀이 중에서 눈에 띈 간단한 코드
import java.util.*;
class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        List<String> card1Ary = new ArrayList<>(Arrays.asList(cards1));
        List<String> card2Ary = new ArrayList<>(Arrays.asList(cards2));

        String answer = "Yes";
        for(String str:goal) {
            if(!card1Ary.isEmpty() && card1Ary.get(0).equals(str)) {
                card1Ary.remove(0);
            } else if(!card2Ary.isEmpty() && card2Ary.get(0).equals(str)) {
                card2Ary.remove(0);
            } else {
                answer = "No";
                break;
            }
        }
        return answer;
    }
}