개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 11일차 TIL + 오늘의 학습 가이드

킴도비 2024. 8. 1. 14:48

💡 오늘의 학습 키워드

  • 정렬

 

✅ 오늘 공부한 내용

  • 정렬
  • Queue에 배열 넣기
  • 오늘의 프로그래머스 문제! 카드 뭉치
 

프로그래머스

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

programmers.co.kr

 

 

👀 오늘의 회고

🤣 오늘의 문제점

  • Queue에서 값이 없을 때 조건에 넣지 않았던 점..
  • poll()과 peek()을 쓰는 위치를 조심하지 않았던 점..
  • 두 가지가 문제가 되었었다..! 조금 더 신중하게 생각했더라면 한 번에 풀 수 있었을 것 같다.

 

🔥 어떤 시도를 했는가?

  • 일단 문제를 보자마자 든 생각은 큐에 넣어야 겠다!
  • 하나씩 빼서 비교해야지~ 라고 생각했는데 비교한 이후에 하나씩 빼도 되는 문제였다..
  • 일단 초반엔 조건문을 너무 지저분하게 작성하고, while로 했었는데 생각해보니 goal의 length만큼만 돌아도 되는 문제였다!
  • 아래는 내가 푼 문제다.
import java.util.*;

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        // 코니 영어 단어가 적힌 카드 뭉치 두개
        // 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있나 확인
        
        // 카드 뭉치에서 카드를 순서대로 한 장씩 사용
        // 한번 사용하면 사용 불가능
        // 사용하지 않고 다음 카드로 넘어갈 수 없음
        // 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없음
        
        // 큐를 사용해 보자
        Queue<String> qcard1 = new LinkedList<>();
        Queue<String> qcard2 = new LinkedList<>();
        
        for(int i = 0; i < cards1.length; i++){
            qcard1.add(cards1[i]);
        }
        
        for(int j = 0; j < cards2.length; j++){
            qcard2.add(cards2[j]);
        }
        
        String answer = "";
        
        for(int i = 0; i < goal.length; i++){
            
            if(!qcard1.isEmpty() && qcard1.peek().equals(goal[i])){
                answer = "Yes";
                qcard1.poll();
            } else if(!qcard2.isEmpty() && qcard2.peek().equals(goal[i])){
                answer = "Yes";
                qcard2.poll();
            } else {
                return answer = "No";
            }
        }
        
        
        return answer;
    }
}

 

 

  • ChatGPT한테 물어보니 더 짧은 코드를 제시해줬다. 이거 배웠던 내용인데.. 다음 번에는 꼭 이 방법을 쓰도록 신경써야겠다.
import java.util.*;

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

        for (String target : goal) {
            if (!qcard1.isEmpty() && qcard1.peek().equals(target)) {
                qcard1.poll();
            } else if (!qcard2.isEmpty() && qcard2.peek().equals(target)) {
                qcard2.poll();
            } else {
                return "No";
            }
        }

        return "Yes";
    }
}

 

👏 무엇을 새로 알았는가?

  • Queue에 Arrays.asList(배열)을 사용하여 값 넣기
  • 조건문의 위치 잘 세우기
  • return으로 조기종료 시키기

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 항해 99 문제 풀기
  • 원티드 미션 빠르게 개발하기
  • 된다면 이력서 쓰기