본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 의상

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

 

프로그래머스

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

programmers.co.kr

  • 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다.
  • 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다.
  • 코니는 하루에 최소 한 개의 의상은 입습니다.

HashMap을 이용해서 의상 착용 부위의 개수를 저장해 놓고, keySet()을 이용하여 key들을 String 배열로 만들었다. 그리고 answer에 착용 부위의 개수 + 1(해당 부위에 아무것도 착용하지 않는 경우)를 곱해주고 answer를 출력할 때 -1(모두 착용하지 않은 경우)를 빼주어서 정답을 구했다.

예를 들어, 예시의 [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]의 경우

eyewear가 1개, headgear가 2개인데, 각각 착용하지 않는 경우를 하나 더해서 2 * 3 = 6 그리고 eyeweaer, headgear 모두 착용하지 않는 경우가 생기는데 최소 한 개의 의상은 입어야 하기 때문에 이 경우의 1을 빼주어 정답을 구한 것이다.

import java.util.HashMap;
class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;

        HashMap<String, Integer> map = new HashMap<>();
        for (int i = 0; i < clothes.length; i++) {
            if (map.containsKey(clothes[i][1])) {
                map.put(clothes[i][1], map.get(clothes[i][1]) + 1);
            } else {
                map.put(clothes[i][1], 1);
            }
        }
        String[] clothe = map.keySet().toArray(new String[0]);
        for (int i = 0; i < map.size(); i++) {
            answer *= map.get(clothe[i]) + 1;
        }

        return answer - 1;
    }
}