[Study] 프로그래머스 lv.1 카드 뭉치 (62%)

ayboori·2023년 8월 28일
0

Java Study

목록 보기
27/34

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

문제 설명

cards1와 cards2의 배열의 내용을 조합하여 goal을 만들 수 있는지 확인하는 문제이다.

조건 : 재사용 불가 / 생략 불가 / 순서 뒤엎기 불가

풀이 로직

cards1, cards2 배열의 포인터를 한 칸씩 밀면서, 두 포인터 내부의 중 어느 곳에도 해당되지 않으면 No 를, 아니면 Yes 를 리턴하는 방식으로 풀이!

Untitled

내가 작성한 풀이

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

이건 관련 자료!

https://soonsin.com/236

profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

0개의 댓글