기본 틀 :
using System;
public class Solution {
public string solution(string[] cards1, string[] cards2, string[] goal) {
string answer = "";
return answer;
}
}
문제를 보고 처음에는
2개의 List에 cards1과 cards2를 각각 넣고
goal.Length 길이 만큼 비교하면서 cards1[0], cards2[0]에
해당 문자열이 있을 경우 해당 변수에서 index 0번 문자열을 제거하는 방식으로
문제를 풀 생각이었다.
그런데, 그 방식은 Queue의 방식과 동일하다는 것을 깨닫고
Queue<string> queue = new Queue<string>()
처럼 Queue로 변경했다.
Queue에는 Peek() 라는 메서드가 존재 하는데
Queue의 맨 앞 요소를 꺼내지 않고 맨 앞 요소가 뭔지 확인할 수 있는 메서드이다.
이 메서드를 활용해 goal을 반복 순회하면서 queue를 맨 앞 요소를 확인할 경우
위와 같은 오류가 발생했다.
그래서,
'string 매개변수 cards1, cards2가 Queue가 생성될 때 안 들어갔나?'
하면서 확인한 결과 그건 또 아니었다...
한 참을 뻘 짓을 다 해보다가
'
queue.Dequeue()로 Queue에 요소가 없어서
queue.Peek()로 맨 앞 요소를 확인하고자 하는데
요소가 없으니깐 오류가 나는거 아닌가?
'
라는 생각이 들었다.
그래서, queue.Count > 0을 조건에 추가한 결과
모든 테스트를 통과할 수 있었다...
using System;
using System.Collections.Generic;
public class Solution
{
public string solution(string[] cards1, string[] cards2, string[] goal)
{
Queue<string> queue1 = new Queue<string>(cards1);
Queue<string> queue2 = new Queue<string>(cards2);
bool check = true;
for(int i = 0; i < goal.Length; i++)
{
if(queue1.Count > 0 && goal[i].Equals(queue1.Peek())) queue1.Dequeue();
else if(queue2.Count > 0 && goal[i].Equals(queue2.Peek())) queue2.Dequeue();
else
{
check = false;
break;
}
}
return check ? "Yes" : "No";
}
}
'문제 풀기 > C#' 카테고리의 다른 글
57. 모의고사 (0) | 2025.02.07 |
---|---|
56. 과일 장수 (0) | 2025.02.06 |
54. 2016 (DateTime Class) (0) | 2025.02.06 |
53. 명예의 전당 (1) (0) | 2025.02.05 |
52. 콜라 문제 (0) | 2025.02.05 |