본문 바로가기

Algorithm/Programmers

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

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

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

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

java
닫기
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의 마지막 큐잉 상태를 저장하는 인덱스를 생성합니다.

java
닫기
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)