inblog logo
|
moohyun
    알고리즘문제풀기

    [고득점 kit] 의상

    화낼거양's avatar
    화낼거양
    Nov 21, 2024
    [고득점 kit] 의상
    Contents
    문제정답코드 설명
     
    https://school.programmers.co.kr/learn/courses/30/lessons/42578
     

    문제

     
    notion image
     
    기본적으로 주어진 코드 :
    class Solution { public int solution(String[][] clothes) { int answer = 0; return answer; } }
     

    정답

     
    import java.util.*; class Solution { public int solution(String[][] clothes) { Arrays.sort(clothes, new Comparator<String[]>() { @Override public int compare(String[] o1, String[] o2) { return o1[1].compareTo(o2[1]); // 뒤의 값을 기준으로 정렬 } }); } } ); List<Integer> list = new ArrayList<>(); int count = 1; for (int i = 1; i < clothes.length; i++) { if (clothes[i][1].equals(clothes[i-1][1])) { count++; } else { list.add(count); count = 1; } } list.add(count); int result = 1; //(x+a)(x+b)(x+c) - 1 for (int i = 0; i < list.size(); i++) { result *= (1+list.get(i)); } result--; return result; } }
     
     

    코드 설명

     

    배열 정렬

     
    Arrays.sort(clothes, new Comparator<String[]>() { @Override public int compare(String[] o1, String[] o2) { return o1[1].compareTo(o2[1]); // 의상의 종류(뒤의 값)을 기준으로 정렬 } });
     
    • 목적: 의상 종류를 기준으로 정렬합니다.
    • Comparator: o1[1].compareTo(o2[1])를 사용하여 의상 종류(clothes[i][1])를 기준으로 오름차순 정렬합니다.
     

    의상 종류별 개수 계산

     
    List<Integer> list = new ArrayList<>(); int count = 1; for (int i = 1; i < clothes.length; i++) { if (clothes[i][1].equals(clothes[i-1][1])) { count++; } else { list.add(count); count = 1; } } list.add(count);
     
    • 목적: 동일한 의상 종류의 개수를 계산하여 리스트에 저장합니다.
    • 로직:
      • 반복문을 통해 의상 배열을 순회하면서 이전 의상과 동일한 종류인지 확인합니다.
      • 동일한 종류라면 count를 증가시킵니다.
      • 다른 종류로 변경되면, 현재까지의 count를 리스트에 추가하고 count를 초기화합니다.
      • 마지막으로 남은 count를 리스트에 추가합니다.
     

    조합의 총 경우의 수 계산

     
    int result = 1; //(1+a)(1+b)(1+c) - 1 for (int i = 0; i < list.size(); i++) { result *= (1 + list.get(i)); } result--;
     
    • 목적: 의상 종류별 조합의 총 경우의 수를 계산합니다.
    • 로직:
      • 각 의상 종류의 개수에 1을 더한 값을 모두 곱합니다. 이는 각 종류에서 선택하지 않는 경우를 포함하기 위함입니다.
      • 최종적으로 모든 조합에서 아무 것도 선택하지 않는 경우를 제외하기 위해 1을 뺍니다.
     

    전체 코드의 작동 과정

    1. 배열 정렬: 의상 배열을 종류별로 정렬합니다.
    1. 의상 종류별 개수 계산: 각 의상 종류의 개수를 계산하여 리스트에 저장합니다.
    1. 조합의 총 경우의 수 계산: 모든 조합의 수를 계산하고, 최종 결과를 반환합니다.
    Share article
    Contents
    문제정답코드 설명

    moohyun

    RSS·Powered by Inblog