[프로그래머스] 42578번: 의상 (JAVA)

2023. 8. 16. 16:41·Skills/Algorithm
import java.util.*;

class Solution {
    public int solution(String[][] clothes) {
        // 각 종류별로 최대 1가지 의상
        // -> 키 별로 1가지 값만 존재할 수 있다
        // '서로 다른 옷의 조합' -> 스타일
        // for (String[] c : clothes) {
        //     for (String s : c) {
        //         System.out.print(s + " ");
        //     }
        //     System.out.println();
        // }
        Map<String, Integer> map = new HashMap<>();
        for (String[] c : clothes) {
            // i = 0: 각기 옷의 이름
            // i = 1: 옷의 종류 (겹치면 안됨)
            // map.put(c[1], 1);
            // 같은 카테고리는 key를 통해서 한 번만 저장
            // 이미 카테고리가 저장이 되어 있다면 +1을 해주고,
            // 없다면 1을 대입해주는 조건
            // if (map.containsKey(c[1])) {
            //     // 있다는 것은 -> 이미 1이 put 되어 있다는 의미이므로
            //     map.put(c[1], map.get(c[1]) + 1);    
            //     // +1한 값으로 재대입(재할당, 수정)
            //     // map을 통해서 특정한 값을 세는 방법
            // } else {
            //     map.put(c[1], 1); // 없으면 null 나오니까
            //     // 안정적으로 put
            // }
            map.put(c[1], map.getOrDefault(c[1], 0) + 1);
            
        }
        // System.out.println(map); // 각각의 옷의 종류를 key
        // 각 종류가 뭔지는 중요하지 않음 (겹치는 건 어차피 같은 key 합쳐짐)
        // values들만 중요함
        // System.out.println(map.values());
        // 가짓수 -> 각각의 항목들의 갯수들을 모두 곱해주면
        // 햄버거 - 음료 (햄버거나 음료 중에 한쪽 안시켜도 되는 확률의 조합)
        // (불고기, 새우, 치킨) / (콜라, 사이다)
        // (3 + 1) * (2 + 1)
        // 코니는 하루에 최소 한 개의 의상은 입습니다. -> 전부 선택 안함
        // 전부 선택하지 않음 -> 1
        // 1. 특정한 카테고리를 아예 선택하지 않음 (개별 가짓수 + 1)
        // 2. 그래도 뭐라도 하나는 선택해야함 (전체 가짓수 - 1)
        int answer = 1;
        for (int v : map.values()) {
            // 1: 특정한 카테고리의 수 = map.values()의 원소들
            answer *= (v + 1); // 안 입는다 옵션까지 합해서 +1로 곱해줌
        }
        answer -= 1; // '아무것도 안입는다'는 없으니까
        return answer;
    }
}

'Skills > Algorithm' 카테고리의 다른 글

[프로그래머스] 42576번: 완주하지 못한 선수 (JAVA)  (0) 2023.08.17
[백준] 16194번: 카드 구매하기 2 (JAVA)  (0) 2023.08.17
알고리즘 Java 맵  (0) 2023.08.16
[백준] 1260번: DFS와 BFS (JAVA)  (0) 2023.08.16
[프로그래머스] 43165번: 타겟 넘버 (JAVA)  (0) 2023.08.11
'Skills/Algorithm' 카테고리의 다른 글
  • [프로그래머스] 42576번: 완주하지 못한 선수 (JAVA)
  • [백준] 16194번: 카드 구매하기 2 (JAVA)
  • 알고리즘 Java 맵
  • [백준] 1260번: DFS와 BFS (JAVA)
개발자 윤구나
개발자 윤구나
개발 공부를 하고 있습니다. Let's go!
  • 개발자 윤구나
    이것은 무엇?????
    개발자 윤구나
    • 분류 전체보기
      • Skills
        • Java
        • Database
        • Flutter, Dart
        • JavaScript
        • React
        • HTML5
        • CSS3, SCSS
        • PHP
        • C#
        • Unity
        • Algorithm
        • GIT·GitHub
        • 그 외
      • Book Review
      • IT NEWS
      • 설계
      • 자기 계발
  • 블로그 메뉴

    • 홈
    • 방명록
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
개발자 윤구나
[프로그래머스] 42578번: 의상 (JAVA)
상단으로

티스토리툴바