이전 포스팅: 카드 뭉치 (자바)
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를 만들어내는 것이 한결 깔끔해졌다.