ArrayList 프로그래머스 - 카드뭉치
https://school.programmers.co.kr/learn/courses/30/lessons/159994#qna
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
List를 이용해서 각각의 카드뭉치에서 단어를 조합해서
배열 goal[ ]에 있는 해당 문장을 완성시키면 yes 그렇지않으면 no를 return하는 퀴즈다.
매개변수로 주어진 cards1과 cards2의 문자열 배열을 asList로 담아줘야겠다.
public static String solution(String[] cards1, String[] cards2, String[] goal) {
String answer = "yes";
ArrayList cardList1 = new ArrayList(Arrays.asList(cards1));
ArrayList cardList2 = new ArrayList(Arrays.asList(cards2));
각각의 배열에 문자열 값이 이렇게 담겨있다고 가정한다면
String[] cards1 = {"i","drink","water"};
String[] cards2 = {"want", "to"};
String[] goal = {"i","want","to", "drink","water"};
1️⃣ goal[ ]을 루프시키면서 조건을 검사해야한다.
goal의 i번째와 cardList의 0번째 요소를 서로 비교하는데
*️⃣ list는 삭제하는 순간 다음요소들이 알아서 빈칸을 채우기 때문에 cardList들의 0번째 요소만 비교해주면 된다.
cardList1이 조건이 거짓이면
cardList2의 조건도 똑같이 비교한다.
for(int i =0; i<goal.length; i++) {
if(cardList1.size() > 0 && goal[i].equals(cardList1.get(0))) {
cardList1.remove(0);
}
else if (cardList2.size() > 0 && goal[i].equals(cardList2.get(0))) {
cardList2.remove(0);
}
else {
answer = "no";
}
System.out.println(cardList1);
System.out.println(cardList2);
}
return answer;
1️⃣번째 루프를 돌면
goal의 0번째 요소가 "i" 이기때문에 cardList1의 0번째 "i" -> cardList2.remove(0)
cardList1 : [drink, water]
cardList2 : [want, to]
2️⃣번째 루프
goal의 1번째 요소가 "want" / cardList2의 0번째가 "want:" -> cardList2.remove(0)
[drink, water]
[to]
3️⃣번째 루프
goal의 2번째 요소가 "to" / cardList2의 0번째가 "to:" -> cardList2.remove(0)
[drink, water]
[ ]
4️⃣번째 루프
goal의 3번째 요소가 "drink" / cardList1의 0번째가 "drink" -> cardList1.remove(0)
[water]
[ ]
5️⃣번째 루프
goal의 4번째 요소가 "water" / cardList1의 0번째가 "water" -> cardList1.remove(0)
[ ]
[ ]
cardList1, 2가 전부비워졌다는 것은 goal []의 단어조합이 일치한다는 것이라서
"yes"를 return함.
전체코드
package list;
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public static String solution(String[] cards1, String[] cards2, String[] goal) {
String answer = "yes";
ArrayList cardList1 = new ArrayList(Arrays.asList(cards1));
ArrayList cardList2 = new ArrayList(Arrays.asList(cards2));
for(int i =0; i<goal.length; i++) {
if(cardList1.size() > 0 && goal[i].equals(cardList1.get(0))) {
cardList1.remove(0);
}
else if (cardList2.size() > 0 && goal[i].equals(cardList2.get(0))) {
cardList2.remove(0);
}
else {
answer = "no";
}
System.out.println(cardList1);
System.out.println(cardList2);
}
return answer;
}
public static void main(String[] args) {
String[] cards1 = {"i","drink","water"};
String[] cards2 = {"want", "to"};
String[] goal = {"i","want","to", "drink","water"};
System.out.println(solution(cards1, cards2, goal));
}
}