[프로그래머스,Level 2] 위장(JAVA 구현)

2021. 1. 21. 15:24·CodingTest/프로그래머스(Programmers)
반응형

- 첫 풀이

  문제 자체를 읽었을 때, 조합을 구하는 문제라고 생각해 버려 접근을 잘못하였다. 열심히 삽을 푸다 다른 분들의 풀이를 조금 참고하게 되었다.

 

- 정답풀이

  이 문제는 사실 수학적인 '데카르트 곱'의 곱집합에 대한 문제라고 생각할 수 있다. 곱집합은 두 집합의 요소들로 만들 수 있는 경우의 수를 구하는 개념으로 쓰인다. 이 개념을 이용하기 전에 주의해야 할 점은 각각의 옷 종류에는 아예 선택하지 않는 경우 또한 존재하기 때문에 각 요소들의 개수 +1로 고려해주어야 한다. 

 

  입력 예제 1번의 경우 headgear가 2개, eyewear가 1개이지만, 안 입는 경우를 포함해 각각 3개 2개로 고려한다. 곱집합을 이용해 3 * 2 =6개가 되지만, 여기에는 두 집합의 요소로 만들 수 있는 모든 경우의 수가 포함되어 있다는 사실을 잊으면 안 된다. 앞서 안 입는 경우를 각각 추가해주었기 때문에 곱집합의 결과 (안 입기, 안 입기)라는 순서쌍 또한 존재한다. 그러나 문제에서는 최소 1벌의 옷은 입어야 한다는 제한사항이 존재하기 때문에 이 경우를 배제하게 되면 최종 공식은 (옷 종류 +1) * (옷 종류 +1) * (옷 종류 +1)...... -1이 된다.

 

  여기서 옷 종류를 카운팅 하는 방법은 level 1의 완주하지 못한 선수 문제에서 사용한 해시 맵의 getOrDefault() 메서드를 활용하게 된다.

import java.util.HashMap;
import java.util.Map.Entry;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        
        // 1. 옷 종류를 카운팅하기 위한 해시맵.
        HashMap<String,Integer> map = new HashMap<>();
        
        // 2. 옷 종류를 카운팅.
        for(String str[] : clothes)           
            map.put(str[1],map.getOrDefault(str[1],0)+1);
        
        // 3. 옷 종류의 수 + 안입는 경우 후, 곱집합  
        for(Entry<String,Integer> entry : map.entrySet())            
            answer *= entry.getValue()+1;
        
        // 4. 모두 안입는 경우 배제.
        return answer-1;
    }
}
저작자표시 (새창열림)
'CodingTest/프로그래머스(Programmers)' 카테고리의 다른 글
  • [프로그래머스,Level 2] 카펫 (JAVA 구현)
  • [프로그래머스,Level 2] 구명보트 (JAVA 구현)
  • [프로그래머스,Level 2] 전화번호 목록(JAVA 구현)
  • [프로그래머스,Level 2] H-Index(JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준7576자바
    알고리즘
    leetcode 2236
    자바
    Easy
    TypeScript
    medium
    백준7576
    백준
    백준2751
    BOJ
    meidum
    boj2108
    백준1427
    boj1427
    Java
    프로그래머스
    next 14
    백준1260
    component-scan
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[프로그래머스,Level 2] 위장(JAVA 구현)
상단으로

티스토리툴바