본문 바로가기
개인 공부/TIL

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

by 킴도비 2024. 7. 27.

💡 오늘의 학습 키워드

  • 해시
  • 조합

 

✅ 오늘 공부한 내용

 

프로그래머스

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

programmers.co.kr

  • 오늘의 프로그래머스 문제! 의상

 

👀 오늘의 회고

🤣 오늘의 문제점

  • 그냥 문제가 조금 이해하기 힘든 내용이었다.. 어떤 수학 공식을 써야할지 망설이게 되었다..
  • 해쉬를 쓰는 건 성공했으나 여전히 공식이 어려운 것 같다..!

 

🔥 어떤 시도를 했는가?

  • 초반에 조합을 시도했으나 어떻게 곱해야 할지 감이 오지 않았다.. 그래서 질문하기를 참고하였다!
  • 한마디로 Combination을 활용하는 것이다.
  • 조합(모든 갯수) Combination (최대로 뽑을 숫자 순)이다.
  • 즉 모든 갯수를 n, 최대로 뽑을 숫자 r이라 치면 nCr이 되는데 해당 식은 nPr / r!로 계산을 해주어야 한다.
  • 즉, 모자로 예시를 들자면 모자의 모든 갯수가 2개고 우리가 최대로 뽑을 숫자는 1개(중복이 안되기 때문에 하나만 써야 하니까) ₂C₁ = 2 / 1 -> 2이고, 선택하지 않을 경우의 수 ₂C₀ = 0! = 1이기에
  • 모자에 대한 확률은 즉 ₂C₁ + 1 = 2 + 1인 것이다.
  • 그런데 모자뿐만 아니라 안경까지 조합하게 된다면 ₁C₁ = 1 / 1! = 1 / 1 = 1와 ₁C₀ = 0! = 1이기에 ₁C₁ + ₁C₀ = 1 + 1 = 2
  • 모든 조합의 수는 모자 나올 경우의 수 * 안경류 나올 경우의 수 이기 때문에 3 * 2가 되는데 모두 선택하지 않은 경우는 제외해야 하기 때문에 전체 값에서 -1을 해주어야 한다.
  • 즉 3 * 2 - 1(전체 선택 안한 경우를 곱하기 때문에) = 5가 된다.

  • 오늘 일정이 있어서 급하게 푼 감이 없잖아 있는데 집중만 했다면 바로 풀 수 있었지 않았을까 하는 문제였다!
import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        // 코니 옷 조합
        // 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있다.
        // 착용한 의상의 일부가 겹치더라도 다른 의상이 겹치지 않거나 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산한다.
        // 코니는 하루에 최소 한 개의 의상은 입는다.
        // 서로 다른 옷의 조합의 수를 return 하도록 작성하라
        
        // DP로 풀어야 하나..?
        // 일단 먼저 종류별로 카운트를 해야할 것 같다..
        HashMap <String, Integer> hsm = new HashMap<>();
        
        for(int i = 0; i < clothes.length; i++){
            if(hsm.containsKey(clothes[i][1])){
                hsm.put(clothes[i][1], hsm.get(clothes[i][1]) + 1);
            } else {
                hsm.put(clothes[i][1], 1);
            }        
            //System.out.println(hsm);
        }
        
        // 일단 조합으로 풀어보자
        //System.out.println(hsm.size());

        int answer = 1;
        
        for (int count : hsm.values()) {
            answer *= (count + 1);
        }
        
        
        return answer -1;
    }
}

 

👏 무엇을 새로 알았는가?

  • 조합과 해당 경우의 수를 구하는 것에 대하여 다시 공부하게 되었다!
  • 초반에 r을 몇 개를 선택해야 하는거지? 하고 슬펐는데 답은 문제에 나와있었고..(최대 1개 또는 안쓰는 것...ㅎ)
  • 해당 조합을 다 곱하면 매우 쉬워지는 문제였던 것..

 

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

  • 항해 99문제~
  • 책 마저 정리하기!