카테고리 없음

프로그래머스) 카드뭉치 -자바

Jr.고래 2024. 6. 21. 09:09

1. 개인적인 문제 평가

문제를 풀 때 본문이 아니라 예시를 보며 풀거나 예시에만 집중하는 나쁜 습관을 고쳐줄 수 있던 문제..

 

주의할 점 : 예시는 그저 문제의 하나의 예시일뿐 모든 케이스를 커버하지는 못한다.

 

 

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

 

프로그래머스

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

programmers.co.kr

 

2. 문제 분석

문제 조건 

원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.(이게 제일 중요함, 본질)

 

예시에 휘둘리지 말자
예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다면 첫 번째 카드 뭉치에서 "i"를 사용한 후 두 번째 카드 뭉치에서 "want"와 "to"를 사용하고 첫 번째 카드뭉치에 "drink"와 "water"를 차례대로 사용하면 원하는 순서의 단어 배열을 만들 수 있습니다.

 

예시를 본다면  카드뭉치 2개가 주어지는데 A,B를 번갈아 써야하는것처럼 보인다

ex) A -> B -> B -> A ...  or A -> B -> A -> B 

 

그러나 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.  --> 카드 뭉치를 번갈아서 뽑아야 한다는 말은 없음

그저 예시에서 이런 경우도 있다라고 알려준것일 뿐 

 

한 카드 뭉치에서만 정답에 해당하는 단어가 다 뽑혀도 상관이 없다

(그저 어느 카드뭉치건 순서대로 뽑으면 됨)

3. 문제 풀이

public class Solution {
    public static String solution(String[] cards1, String[] cards2, String[] goal) {
        int index1 = 0;
        int index2 = 0;

        for (String word : goal) {
            if (index1 < cards1.length && cards1[index1].equals(word)) {
                index1++;
            } else if (index2 < cards2.length && cards2[index2].equals(word)) {
                index2++;
            } else {
                return "No";
            }
        }
        return "Yes";
    }
}

 

* goal보다 cards1, cards2 둘중 하나의 크기가 작을 수 있기 때문에 index 검사를 미리 한다

( && 연산자를 쓰기 때문에 앞의 조건이 맞지 않으면 뒤에 조건을 검사하지 않음, outofindex 오류가 나타나지 않음)

 

* return문을 만나지 않으면 "yes", return문을 만나면 "No"