반갑습니다!

[프로그래머스] 위장 본문

알고리즘 문제 풀이

[프로그래머스] 위장

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

풀이

이 문제는 수학에서의 경우의 수 문제라고 볼 수 있다. 문제의 제한사항에 같은 이름을 가진 의상은 존재하지 않고, 스파이는 하루에 최소 한 개의 의상을 입는다고 되어있다. 그리고 각 종류의 의상은 1가지를 선택할 수도 있지만 입지 않을 수 있다. 따라서 [얼굴 갯수 + 1] x [상의 갯수 + 1] x [하의 갯수 + 1] x [겉옷 갯수 + 1] - 1이 된다. 이 때 마지막에 -1은 어떠한 의상도 입지 않은 경우를 빼주는 것이다.

코드

C++

#include <string>
#include <vector>
#include <map>
using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    map<string, int> map; // 각 의상 종류를 저장하기 위한 map
    for (vector<string> cloth : clothes)
        map[cloth[1]]++;

    for (auto it : map)
        answer *= (it.second + 1);

    return answer - 1;
}

Java

import java.util.HashMap;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        HashMap<String, Integer> map = new HashMap<>(); // 의상 종류별로 갯수를 저장하기 위한 Map
        for (String[] cloth : clothes)
            map.put(cloth[1], map.getOrDefault(cloth[1], 0) + 1);

        for (int v : map.values())
            answer *= (v + 1);
        return answer - 1;
    }
}