카드 뭉치 (자바) v2

김재현·2024년 4월 29일
1

알고리즘 풀이

목록 보기
81/89
post-thumbnail

이전 포스팅: 카드 뭉치 (자바)

문제

정답 풀이

import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        String answer = "";
        
        List<String> cards1List = new ArrayList<>();
        List<String> cards2List = new ArrayList<>();
        
        for(int i=0;i<cards1.length;i++) {
            cards1List.add(cards1[i]);
        }
        for(int i=0;i<cards2.length;i++) {
            cards2List.add(cards2[i]);
        }        
        
        for(int i=0;i<goal.length;i++) {
            if(cards1List.indexOf(goal[i])==0) {
                cards1List.remove(0);
            } else if(cards2List.indexOf(goal[i])==0) {
                cards2List.remove(0);
            } else {
                return "No";
            }
        }
        
        return "Yes";
    }
}

우선 배열을 ArrayList로 변경해준 후,
indexOf로 해당하는 값이 있는지, 해당하는 값이 맨 앞 번호가 맞는지 확인해줬다.

.indexOf("확인할 값") : 해당 값이 있다면 해당하는 순번을, 없다면 -1 을 return

개선 사항

이전 포스팅을 확인해보니 Arrays.asList() 를 사용한 것이 있었다.

List 형태가 되어 method 사용이 불가했다고 했는데, 그렇다면 ArrayList<String> 이라고 선언한다면 method 사용이 가능하지 않을까?

하지만 돌려보니 오류메세지가 나왔다.

/Solution.java:17: error: incompatible types: no instance(s) of type variable(s) T exist so that List<T> conforms to ArrayList<String>
        ArrayList<String> cards1List = Arrays.asList(cards1);
                                                    ^
  where T is a type-variable:
    T extends Object declared in method <T>asList(T...)
/Solution.java:18: error: incompatible types: no instance(s) of type variable(s) T exist so that List<T> conforms to ArrayList<String>
        ArrayList<String> cards2List = Arrays.asList(cards2);
                                                    ^
  where T is a type-variable:
    T extends Object declared in method <T>asList(T...)

Arrays.asList() 메서드는 주어진 배열을 기반으로 하는 고정 크기의 리스트를 반환했기 때문이다. 반환된 리스트의 타입은 java.util.List 인터페이스를 구현한 java.util.Arrays.ArrayList 클래스이다. 한마디로, List<> 로 받아야 한다는 뜻이다.

그렇다면 해결방법은 무엇일까?

그것은 바로 ArrayList 생성자를 사용하여 ArrayList 객체를 명시적으로 생성하는 것이다!

ArrayList<String> cards1List = new ArrayList<>(Arrays.asList(cards1))

이렇게 생성해주면 된다.

그렇다면 타입 변환을 사용하여

List<String> cards1List = new ArrayList<>(Arrays.asList(cards1))

로 고칠 수 있는 것이다.

수정된 답안

import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        String answer = "";
        
//         List<String> cards1List = new ArrayList<>();
//         List<String> cards2List = new ArrayList<>();
        
//         for(int i=0;i<cards1.length;i++) {
//             cards1List.add(cards1[i]);
//         }
//         for(int i=0;i<cards2.length;i++) {
//             cards2List.add(cards2[i]);
//         }        
        
        List<String> cards1List = new ArrayList<>(Arrays.asList(cards1));
        List<String> cards2List = new ArrayList<>(Arrays.asList(cards2));
        
        
        for(int i=0;i<goal.length;i++) {
            if(cards1List.indexOf(goal[i])==0) {
                cards1List.remove(0);
            } else if(cards2List.indexOf(goal[i])==0) {
                cards2List.remove(0);
            } else {
                return "No";
            }
        }
        
        return "Yes";
    }
}

List를 만들어내는 것이 한결 깔끔해졌다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글