1. 문제
2. 풀이 과정
카드 뭉치는 무조건 순서대로 사용해야 하며 카드를 사용하지 않으면 다음 카드로 넘어갈 수 없다.
무조건 제일 앞에 카드를 사용해야 다음 카드도 사용할 수 있다는 말이다.
나는 이러한 특징을 보고 큐를 떠올렸다.
이 문제의 로직은 다음과 같다.
- cards1, cards2를 두 개의 큐에 순서대로 넣는다
- goal에서 문자열을 하나씩 꺼내서 cards1과 cards2 큐의 첫 번째 값과 비교한다.
- goal의 문자열과 같은 문자열이 있다면 해당 큐에서 그 문자열을 꺼내준다.
- 만약 같은 문자열이 없다면 답은 No로 종결된다.
- 반면 모든 goal의 문자열에 대해서 같은 문자열이 존재한다면 답은 Yes가 된다.
3. 내 코드
import java.util.*;
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
// 카드 뭉치 큐에 넣기
Queue<String> c1 = new ArrayDeque<>(Arrays.asList(cards1));
Queue<String> c2 = new ArrayDeque<>(Arrays.asList(cards2));
for(String g: goal) {
if(g.equals(c1.peek())) { // 카드뭉치 1에 있는 경우
c1.poll();
} else if(g.equals(c2.peek())){ // 카드뭉치 2에 있는 경우
c2.poll();
} else {
return "No"; // 두 큐중 어디에도 같은게 없다면 답은 No
}
}
return "Yes"; // 모든 Goal의 문자열에 대해 위의 로직이 통과 됐다면 Yes
}
}
시간복잡도
- O(N)
4. 피드백
- 제일 앞에 카드를 사용해야 다음 카드도 사용할 수 있다는 정보를 통해 큐를 떠올렸다.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (0) | 2024.05.07 |
---|---|
[프로그래머스] 두 개의 수로 특정값 만들기 (0) | 2024.05.06 |
[프로그래머스] 기능 개발 (0) | 2024.05.04 |
[프로그래머스] 요세푸스 문제 (0) | 2024.05.04 |
[프로그래머스] 표 편집 (0) | 2024.05.03 |