N

(프로그래머스 c++)위장 본문

프로그래머스 알고리즘/2단계

(프로그래머스 c++)위장

naeunchan 2020. 5. 15. 10:34
728x90
반응형

 

옷의 모든 조합을 구하여 문제를 푸는 방식이다.

우선 맵을 이용하여 의상의 종류에 따른 개수를 구하였다.

clothes[i][1]는 의상의 종류를 나타내므로 맵의 KEY 값이 된다.

그렇다면 해당하는 KEY의 값을 +1 씩 해주어서 종류에 따른 의상의 개수를 구하였다.

 

맵을 순회하면서 각각의 VALUE + 1 을 answer에 곱하여 마지막에는 answer - 1을 하여 반환해주면 된다.

-1을 하는 이유는 모든 옷을 안입는 경우는 존재하지 않기 때문이다.

 

예를들어 옷의 종류가 A, B, C라고 하자.

A 옷의 개수 : n(A)

B 옷의 개수 : n(B)

C 옷의 개수 : n(C)

그리고 해당 옷을 안입는 경우를 고려하여 각각 + 1을 해주도록 한다.

결국

(n(A) + 1) * (n(B) + 1) * (n(C) + 1)이 된다.

그리고 모든 옷을 안입는 경우는 없기 때문에 위 식에서 -1을 해주면 답이 나오게 된다..!

 

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<vector<string>> clothes) {
    int answer = 1;
    map<string, int> m;
    
    for(int i = 0; i < clothes.size(); i++)
        m[clothes[i][1]]++;
    for(auto itr = m.begin(); itr != m.end(); itr++)
        answer *= (itr->second + 1);

    return answer - 1;
}
728x90
반응형