본문 바로가기
스터디/묘공단 자바 코딩테스트

[프로그래머스/Java] 5일차 코테 문풀 - Lv. 1 카드 뭉치

by 빙수야 팥빙수야 2024. 4. 20.

🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

📝 문제 요약

주어진 배열 cards1과 배열 cards2로 원하는 단어 배열인 goal로 만들 수 있다면,

"Yes"를 만들 수 없다면 "No"를 return 하는 solution함수를 완성하는 것이 목표입니다.

다음과 같은 규칙이 적용됩니다.

  • 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.
  • 한 번 사용한 카드는 다시 사용할 수 없습니다.
  • 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.
  • 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.

입출력 예

 

🔍 문제 풀이 (feat. 접근 방법)

1. cards 배열에서 가져온 단어가 goal의 단어와 같지 않다면, 다른 cards 배열로 넘어가서 단어를 비교한다.

2. 넘어간 후에도 같지 않다면 "No" 문자열을 return, 같다면 순서대로 새로운 배열에 담는다.

 

이렇게 생각하고 문제를 풀다보니....계속 에러의 연속에.... 에러가 안 나면 답이 맞지 않는다 ㅠㅠ

 

그래서 검색을 하여 내가 생각하기에 깔끔한 코드를 보고 이해를 했다!

그리고 주석을 달았다...!

아래 전체 코드를 참고하자~

 

👩🏻‍💻 전체 코드

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        int p1 = 0;
        int p2 = 0;
        
        // goal 배열의 값 하나씩 가져옴
        for (String curStr : goal) {
            // curStr이 cards1[p1] 또는 cards2[p2]에 포함하는지 확인
            if (p1 < cards1.length && curStr.equals(cards1[p1])) {
                p1 += 1; // cards1[p1]에 포함하는 경우 p1 +1 으로 값 증가시키기
            } else if (p2 < cards2.length && curStr.equals(cards2[p2])) {
                p2 += 1; // cards2[p2]에 포함하는 경우 p2 +1 으로 값 증가시키기
            } else {
                return "No"; // 둘 다 포함하지 않는 경우
            }
        }
        
        return "Yes";
    }
}