java 문제풀기(프로그래머스스쿨, 강의)

ArrayList 프로그래머스 - 카드뭉치

LRWoo 2023. 8. 23. 15:03
728x90
반응형

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));
	}
}
728x90
반응형