코테/프로그래머스

[프로그래머스/C#] 카드 뭉치

내꺼블로그 2024. 4. 19. 12:07

문제

https://school.programmers.co.kr/learn/courses/30/lessons/159994

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 


 

코드

 

using System;

public class Solution {
    public string solution(string[] cards1, string[] cards2, string[] goal) {
        string answer = "";
        int idx1 = 0;
        int idx2 = 0;
        for(int i=0;i<goal.Length;i++){
            if(idx1<cards1.Length&&goal[i]==cards1[idx1]){
                idx1++;
            }
            else if(idx2<cards2.Length&&goal[i]==cards2[idx2]){
                idx2++;
            }
            else{
                answer="No";
                break;
            }
        }
        if(String.IsNullOrEmpty(answer))
            answer="Yes";
        return answer;
    }
}

 


 

풀이

goal의 문자열들을 순회하면서 cards1과 cards2 각각의 사용하지 않은 카드 중 맨 앞 순서 카드의 문자열이 goal의 문자열과 같은지를 확인한다.

 

cards1의 현 문자열(cards1[idx1])과 goal의 현 문자열(goal[i])이 같은지를 확인하고 같다면 카드를 사용하였다는 의미로 idx1을 1 증가시킨다.(다음 카드를 사용한다는 의미)

(참고로 초반에 idx1<cards1.Length를 안넣었어서 에러났었던 슬픈 비밀....)

 

cards1의 카드를 사용할 수 없었다면 cards2의 카드를 사용할 수 있는지 비교해본다.

사용할 수 있다면 사용하였다는 의미로 idx2를 1 증가시킨다.(다음 카드를 사용한다는 의미)

 

둘다 사용할 수 없다면 만들 수 없는 문자열이므로 answer에 "No"를 대입하고 for문을 빠져나온다.

 

answer가 빈 문자열이라면 goal 문자열을 만드는데 성공하였다는 의미이므로 answer에 "Yes"를 대입해준다.

그러고 반환하면 끝!

 

 

 

참고

String.IsNullOrEmpty(문자열): 문자열이 null이거나 빈 문자열("")인지 확인하는 메서드.

                                                    bool을 반환(null이거나 빈 문자열이면 true 반환, 아니라면 false 반환)

 

String.IsNullOrWhiteSpace(문자열): 문자열이 null이거나 빈 문자열이거나 공백 문자열(" ")인지 확인하는 메서드.

                                                              IsNullOrEmpty와 마찬가지로 bool을 반환(null, 빈 문자열, 공백 문자열이면 true반환)