문제 풀기/C#

55. 카드 뭉치

kagan-draca 2025. 2. 6. 14:45

 

기본 틀 :

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