본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 42578번: 의상 [Java]

문제: https://school.programmers.co.kr/learn/courses/30/lessons/42578

 

프로그래머스

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

programmers.co.kr

1. 코드

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        Map <String, Integer> cnt = new HashMap<>();
        for(int i = 0; i < clothes.length; i++) {
            if(!cnt.containsKey(clothes[i][1]))
                cnt.put(clothes[i][1], 1);
            else
                cnt.put(clothes[i][1], cnt.get(clothes[i][1]) + 1);
        }
        for(String key : cnt.keySet())
            answer *= cnt.get(key) + 1;
        return answer - 1;
    }
}

2. 설명

for(int i = 0; i < clothes.length; i++) {
    if(!cnt.containsKey(clothes[i][1]))
        cnt.put(clothes[i][1], 1);
    else
        cnt.put(clothes[i][1], cnt.get(clothes[i][1]) + 1);
}

반복문을 통해 각 옷의 종류별 갯수를 파악합니다.

int answer = 1;
for(String key : cnt.keySet())
    answer *= cnt.get(key) + 1;
return answer - 1;

각 옷 종류별 개수 + 1의 값을 곱한 결과에서 -1한 결과를 출력하면 정답입니다. 경우의 수를 알면 쉽게 이해되는데 각 옷을 입는 경우와 안입는 경우가 존재하기에 옷종류에서 +1을 한 것이고, 마지막에 -1을 한 이유는 어떠한 종류도 안입는 경우는 제외한다고 문제에 명시되어 있기에 -1을 합니다.

3. 정리

  1. HashMap을 종류의 개수를 파악하는데 사용
  2. 경우의 수를 이용하여 문제 해결
  3. 안입는 경우도 고려
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges