본문 바로가기

Algorithm/Programmers

Level 1: 카드 뭉치, 배열의 큐잉(Queueing)

이 문서의 내용

    문제 풀이: Queue 자료 구조를 사용

    두 개의 문자열 배열에 해당하는 인자 cards1cards2는 가장 맨 앞의 원소부터 사용 될 수 있습니다.

    문제에서 요구하는 제약 사항이 큐(Queue) 자료구조 동작과 일치하기 때문에 큐잉(Queueing)으로 풀이합니다.

    import java.util.*;
    
    public class Solution
    {
    	public String solution(String[] cards1, String[] cards2, String[] goal) 
    	{
    		Queue<String> q1 = new LinkedList<>(Arrays.asList(cards1));
    		Queue<String> q2 = new LinkedList<>(Arrays.asList(cards2));
    		
    		for (String s : goal) {
    			if (null != q1.peek() && 0 == s.compareTo(q1.peek())) q1.poll();
    			else if (null != q2.peek() && 0 == s.compareTo(q2.peek())) q2.poll();
    			else return "No";
    		}
    		
    		return "Yes";
    	}
    }
    코드 비고
    Line 7:8 new LinkedList<>() 문제에서 제공하는 인자를 Queue 자료구조로 구성합니다.
    Line 10:14 for (String s : goal) { } 두 개의 Queue를 큐잉하면서 문제를 해결합니다.
    문제가 해결되지 않고 중단되면 No를 리턴합니다.

    문제 풀이: 두 개의 인덱스를 사용

    자바의 util 패키지를 사용하지 않고 문제를 풀이합니다.

    두 개의 문자열 배열에 해당하는 인자 cards1 cards2의 마지막 큐잉 상태를 저장하는 인덱스를 생성합니다.

    public class Solution
    {
    	public String solution(String[] cards1, String[] cards2, String[] goal) 
    	{
    		int idx1 = 0, idx2 = 0;
    		for (String s : goal) {
    			if (cards1.length > idx1 && 0 == cards1[idx1].compareTo(s)) {
    				++idx1;
    			} else if (cards2.length > idx2 && 0 == cards2[idx2].compareTo(s)) {
    				++idx2;
    			} else {
    				return "No";
    			}
    		}
    
    		return "Yes";
    	}
    }
    코드 비고
    Line 7 if (card1.length > idx1) Queue의 Null 예외처리는 인덱스와 배열의 길이 비교로 대체합니다.
    Line 9 if (card2.length > idx2)