https://school.programmers.co.kr/learn/courses/30/lessons/159994
cards1와 cards2의 배열의 내용을 조합하여 goal을 만들 수 있는지 확인하는 문제이다.
조건
: 재사용 불가 / 생략 불가 / 순서 뒤엎기 불가
cards1, cards2 배열의 포인터를 한 칸씩 밀면서, 두 포인터 내부의 중 어느 곳에도 해당되지 않으면 No
를, 아니면 Yes
를 리턴하는 방식으로 풀이!
class Solution {
public String solution(String[] cards1, String[] cards2, String[] goal) {
// 재사용 불가 / 생략 불가 / 순서 뒤엎기 불가 / 중간 삽입만 가능
int cards1index = 0;
int cards2index = 0;
for (String g : goal){
if(cards1index < cards1.length){
if (cards1[cards1index].equals(g)){
cards1index ++;
continue;
}
}
if(cards2index < cards2.length){
if(cards2[cards2index].equals(g)){
cards2index ++;
continue;
}
}
return "No";
}
return "Yes";
}
}
이 부분의 바깥 if문이 없었더니 이미 index가 배열의 크기를 벗어나게 되면 오류가 났다.. index를 임의의 값으로 수정할까 하다가 goal과 일치하면 곤란해지므로 if문으로 감쌌다!
if(cards1index < cards1.length){
if (cards1[cards1index].equals(g)){
cards1index ++;
continue;
}
}
0.01 ~ 0.03ms
테스트 1 〉 | 통과 (0.02ms, 66MB) |
---|---|
테스트 2 〉 | 통과 (0.02ms, 76.8MB) |
테스트 3 〉 | 통과 (0.02ms, 79MB) |
테스트 4 〉 | 통과 (0.01ms, 73.8MB) |
테스트 5 〉 | 통과 (0.01ms, 84.9MB) |
테스트 6 〉 | 통과 (0.03ms, 80.8MB) |
테스트 7 〉 | 통과 (0.03ms, 73.3MB) |
테스트 8 〉 | 통과 (0.03ms, 73.9MB) |
테스트 9 〉 | 통과 (0.03ms, 77.4MB) |
테스트 10 〉 | 통과 (0.02ms, 67MB) |
테스트 11 〉 | 통과 (0.03ms, 72.8MB) |
테스트 12 〉 | 통과 (0.03ms, 74.2MB) |
테스트 13 〉 | 통과 (0.02ms, 77.7MB) |
테스트 14 〉 | 통과 (0.02ms, 69.7MB) |
테스트 15 〉 | 통과 (0.02ms, 79.4MB) |
테스트 16 〉 | 통과 (0.03ms, 77.5MB) |
테스트 17 〉 | 통과 (0.03ms, 66.2MB) |
테스트 18 〉 | 통과 (0.03ms, 66.7MB) |
테스트 19 〉 | 통과 (0.04ms, 70.6MB) |
테스트 20 〉 | 통과 (0.03ms, 71.1MB) |
테스트 21 〉 | 통과 (0.03ms, 84.6MB) |
테스트 22 〉 | 통과 (0.02ms, 72.1MB) |
테스트 23 〉 | 통과 (0.03ms, 83MB) |
테스트 24 〉 | 통과 (0.03ms, 91.3MB) |
테스트 25 〉 | 통과 (0.03ms, 75MB) |
바깥 if문을 감싸는 대신
`if(cardIdx1 < cards1.length && target.equals(cards1[cardIdx1]))
를 사용한 풀이가 있었다!
if문 내에서는 && 조건의 경우 앞의 조건이 일치하지 않으면 뒤의 조건은 검사를 하지 않는다고 한다. 그래서 Error 발생을 안 한다고 한다…!!!
관련한 재밌는 블로그를 찾았다
https://makefortune2.tistory.com/151
이건 관련 자료!