카드 뭉치 | 프로그래머스

Bluewave·2024년 8월 18일

코테공부_java

목록 보기
56/99
post-thumbnail

문제

🩶 문제 바로가기

문제레벨정답률
카드 뭉치Lv.169%

My Code

import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        String result = "Yes";
        
        //각각 큐에 저장
        Queue<String> queue1 = new LinkedList<>();
        Queue<String> queue2 = new LinkedList<>();
        
        for(String str : cards1){
            queue1.add(str);
        }
        for(String str : cards2){
            queue2.add(str);
        }

        //goal 달성 여부 확인
        for(int i = 0; i<goal.length; i++){
            String a = queue1.peek();
            String b = queue2.peek();
            
            if(goal[i].equals(a)){  
                queue1.poll();
            } else if(goal[i].equals(b)){  
                queue2.poll();
            } else{
                result = "No";
                break;
            }
        }
        
        return result;
    }
}
  1. 두 개의 카드 내용을 각각 큐에 저장
  2. goal 길이만큼 for문을 돌면서 두 큐 내용 중 일치하는 문자열이 있으면 poll, 없으면 result를 No로 변환
    ㄴ result는 기본적으로 Yes로 초기화

최적화 코드

import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        Queue<String> queue1 = new LinkedList<>(Arrays.asList(cards1));
        Queue<String> queue2 = new LinkedList<>(Arrays.asList(cards2));

        for (String word : goal) {
            if (!queue1.isEmpty() && word.equals(queue1.peek())) {
                queue1.poll();
            } else if (!queue2.isEmpty() && word.equals(queue2.peek())) {
                queue2.poll();
            } else {
                return "No";
            }
        }

        return "Yes";
    }
}
  1. 불필요한 if 조건 삭제
  2. 변수 선언 최소화

개인적으로 이 코드에서 queue를 선언하면서 초기화를 하는 부분이 인상적이었다.
ㄴ 이렇게 해본적이 없어서,, 이렇게 해도 되는지 몰랐음
Queue<String> queue1 = new LinkedList<>(Arrays.asList(cards1));

Arrays.asList()

배열을 고정 크기의 리스트로 변환하는 메서드
이 메서드를 통해서 string 배열을 바로 큐에 넣을 수 있다.

profile
Developer's Logbook

0개의 댓글