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"