#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int bitnum(int i) {
int counts = 0;
while (i != 0) {
if (i & 1)
counts++;
i = i >> 1;
}
return counts;
}
bool cmp(int a, int b) {
if (bitnum(a) > bitnum(b))
return true;
return false;
}
bool uniquecheck(vector<vector<string>> v, int r, int c, int subset) {
for (int i = 0; i < r-1; i++) {
for (int j = i + 1; j < r; j++) {
bool samecheck = true;
for (int k = 0; k < c; k++) {
if ( (1<<k & subset) == 0 )
continue;
if (v[i][k] != v[j][k]) {
samecheck = false;
break;
}
}
if (samecheck)
return false;
}
}
return true;
}
int solution(vector<vector<string>> relation) {
int answer = 0;
int rowsize = relation.size();
int colsize = relation[0].size();
vector<int> unique;
for (int i = 1; i < 1 << colsize; i++) {
if (uniquecheck(relation, rowsize, colsize, i))
unique.push_back(i);
}
sort(unique.begin(), unique.end(), cmp);
while (!unique.empty()) {
int n = unique.back();
unique.pop_back();
answer++;
for (vector<int>::iterator it = unique.begin(); it != unique.end();) {
if ((*it & n) == n)
it = unique.erase(it);
else
it++;
}
}
return answer;
}
https://www.youtube.com/watch?v=gCy00NeWag0의 동영상 풀이를 보고 풀었습니다!
'카카오 코딩 테스트 풀이' 카테고리의 다른 글
매칭 점수 풀이 (0) | 2019.09.04 |
---|---|
길 찾기 게임 풀이 (0) | 2019.09.03 |
무지의 먹방 라이브 (0) | 2019.09.02 |
실패율 풀이 (0) | 2019.09.01 |
오픈채팅방 풀이 (0) | 2019.09.01 |