본문 바로가기
C++

코딩테스트 연습->해시->위장

by Hwoarang757 2021. 8. 30.

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

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

순열로 모든 부분을 다 탐색하고 조합의 개수를 세어보면 된다고 생각하였지만 , 답은 계속 맞지 않았습니다.. ㅠㅠ..

검색으로 힌트를 찾다가 풀이 공식을 보고 작성하였습니다............... 결론은 이해를 못한 상태입니다.ㅠㅠ

 

#include <iostream>
#include <vector>
#include <string>

#include <map>

using namespace std;
//void dfs(int start, int* visit, map<string, string> d, map<string, string>& e);



int solution(vector<vector<string>> clothes) {
    int answer = 1;
    map<string,int> d;
    
    for(auto& i : clothes) d[i.at(1)]++;
    
    int temp = 0;
    
    for(auto& i : d) {
        temp = i.second + 1;
        answer *= temp;    
    }
    
    return answer -1;   
}

/*
void dfs(int start, int* visit, map<string, string> d, map<string, string>& e) {
	if (visit[start] == 1) return;
	if (start >= d.size())  return;

	auto it = d.begin();
	::advance(it, start);
	//cout << it->first << endl;

	for (auto& i : d) {
		if (it->second != i.second) {
			if (e.find(it->first + "+" + i.first) == e.end() ) { //&& e.find(i.first + "+" + it->first) == e.end()) {
				e[it->first + "+" + i.first] = "";
			}
		}
	}

	dfs(start + 1, visit, d, e);
}
*/