📑 1. 문제설명
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr


💡 2. 풀이 과정
이 문제는 queue 로 푸는 문제이다 (이걸 유추할 수 있는 부분)
- card1과 card2는 무조건 앞부터 사용해야 함
- 순서를 뒤바꿀 수 없음
이 두 문장은 FIFO 구조를 나타낸다.
그래서 card1, card2, goal 을 큐를 사용해서 관리 가능하다.
- card1과 card2, goal을 큐로 변환한다.
- goal의 front와 (card1 또는 card2)의 front의 값을 비교한다.
- 사용할 수 있는 카드가 있는가? (값이 같으면 사용 가능)
- Yes이면 해당 큐와 goal에서 각각 poll, 그렇지 않으면 No를 반환한다.
✅입출력 예 첫번째의 경우 - Yes 반환






✅입출력 예 두번째의 경우 - No 반환




⭐ 3. 정답코드
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
// cards1, cards2, goal을 Deque로 변환하기
Deque<String> cardsDeque1 = new ArrayDeque<>(Arrays.asList(cards1));
Deque<String> cardsDeque2 = new ArrayDeque<>(Arrays.asList(cards2));
Deque<String> goalDeque = new ArrayDeque<>(Arrays.asList(goal));
// goalDeque이 빌 때까지 반복
while (!goalDeque.isEmpty()) {
String target = goalDeque.poll(); // goal의 맨 앞 요소 가져오기
// cards1 또는 cards2의 front와 아까 꺼낸 goal의 맨 앞 요소가 같은지 비교
if (!cardsDeque1.isEmpty() && cardsDeque1.peek().equals(target)) {
cardsDeque1.poll(); // cards1에서 해당 카드를 빼기
} else if (!cardsDeque2.isEmpty() && cardsDeque2.peek().equals(target)) {
cardsDeque2.poll(); // cards2에서 해당 카드를 빼기
} else {
return "No"; // 같은 카드가 없으면 "No" 리턴
}
}
return "Yes"; // goal에 든 문장을 완성할 수 있으면 성공
}
}
👏🏻 좋아요 가장 많이 받은 코드
이건 chatGPT에서 찾아보다가 가져온 코드이다.
goal은 굳이 goalDeque을 만들 필요 없이 goal을 그냥 배열 인덱스를 통해 for-each 문으로 순회하는 것이 코드도 간단하고 효율도 좋다.
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
Deque<String> cardsDeque1 = new ArrayDeque<>(Arrays.asList(cards1));
Deque<String> cardsDeque2 = new ArrayDeque<>(Arrays.asList(cards2));
// goal 배열을 순회하면서 비교
for (String target : goal) {
if (!cardsDeque1.isEmpty() && cardsDeque1.peek().equals(target)) {
cardsDeque1.poll();
} else if (!cardsDeque2.isEmpty() && cardsDeque2.peek().equals(target)) {
cardsDeque2.poll();
} else {
return "No";
}
}
return "Yes"; // 모든 목표 문자열을 만들 수 있으면 성공
}
}
🐦 4. 같은 유형 문제
[백준] (Java) 요세푸스 문제 (큐)
📑 1. 문제설명✅ 문제 이문제는 유대인 역사가 플라비우스 요세푸스가 만든 문제이다. N명의 사람이 원 형태로 서 있다. 각 사람은 1부터 N까지 번호표를 갖고 있다. 그리고 임의의 숫자 K가 주
awesomepossum.tistory.com
[프로그래머스] (Java) 주식가격 (스택/큐)
📑 1. 문제설명💡 2. 접근방식이중for문현재 인덱스에 있는 요소과 이후 모든 값을 비교하면서 현재 요소가 비교하고 있는 요소보다 커지면 break;를 걸어준다.그 전까지는 answer[i]++을 해 준다.
awesomepossum.tistory.com
[프로그래머스] (Java) 다리를 지나는 트럭 (스택/큐)
📑 1. 문제설명💡 2. 접근방식 Queue트럭 진입 로직: 다리의 맨 앞 트럭이 나가고 새로운 트럭이 다리에 올라갈 수 있는지 확인한 후 다리에 추가이동시간: 트럭이 다리 위에 오르면 매 1초마다
awesomepossum.tistory.com
[프로그래머스] (Java) 프로세스 문제풀이 (스택/큐)
1. 문제설명 예제 #1문제에 나온 예와 같습니다. 예제 #26개의 프로세스 [A, B, C, D, E, F]가 대기 큐에 있고 중요도가 [1, 1, 9, 1, 1, 1] 이므로 [C, D, E, F, A, B] 순으로 실행됩니다. 따라서 A는 5번째로 실
awesomepossum.tistory.com
[프로그래머스] (Java) 기능개발 (스택/큐)
1. 문제설명프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이
awesomepossum.tistory.com
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
| [프로그래머스] (Java) 안전지대 문제풀이 (21) | 2025.03.05 |
|---|---|
| [리트코드] LeetCode Longest Common Prefix (Easy) in Java (23) | 2025.02.22 |
| [백준] (Java) 요세푸스 문제 (큐) (7) | 2025.02.20 |
| [프로그래머스] (Java) 예상대진표 (트리) (13) | 2025.02.20 |
| [프로그래머스] (Java) 크레인 인형 뽑기 게임 (스택) (9) | 2025.02.18 |