Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Open API
- 트라이 #trie #알고리즘
- 티스토리 open api
- bulk update
- 트라이
- 가사 검색
- trie
- 징검다리 건너기
- Spring Boot
- Python
- 크레인 인형뽑기 게임
- 티스토리
- 알고리즘
- CleanCode
- jdbc
- 불량 사용자
- Tistory
- 프로그래머스
- pycon
- 보행자 천국
- 카카오 인턴
- 튜플
- 호텔 방 배정
Archives
- Today
- Total
택시짱의 개발 노트
[프로그래머스] 후보키 본문
링크
https://programmers.co.kr/learn/courses/30/lessons/42890
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
후보 키의 최대 개수를 구하는 문제인데.
모든 키의 조합을 확인 해봐야 하기 때문에 비트마스킹을 이용하여 풀었습니다.
1. 비트마스킹을 이용하여 키의 모든 조합을 구하고
2. 구해진 키의 모든 조합이 유일성을 만족하는지 확인
3. 최소성을 확인하기 위해 키의 사용이 작은 순서대로 키의 사용이 많은것을 비교하여 최소성을 만족하지 않는 키의 조합을 없애준다.
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<string>
#include<set>
#include<map>
#include<cstring>
#include<functional>
#include<cmath>
#include<stack>
#define SIZE 1010
const int INF = 2000000000;
using namespace std;
typedef long long int ll;
set<vector<int>> key;
map<int, vector<int>> check;
int solution(vector<vector<string>> relation) {
int c_size = relation[0].size();
int r_size = relation.size();
//비트 마스크로 모든 조합 구하기
for (int i = 1; i < (1<<c_size); i++) {
vector<int> index;
for (int j = 0; (1<<j) <= i; j++) {
if ((i & (1<<j)) == (1<<j))
index.push_back(j);
}
//구해진 조합을 이용하여 유일성을 만족하는지 확인
set<vector<string>> tmp_key;
for (int k = 0; k < r_size; k++) {
vector<string> s;
for (int j = 0; j < index.size(); j++) {
s.push_back(relation[k][index[j]]);
}
tmp_key.insert(s);
}
//유일성을 만족하면 조합을 추가
if (tmp_key.size() == r_size) {
check[index.size()].push_back(i);
}
}
int cnt = 0;
//최소성을 확인 하기 위해 키의 갯수를 적은 것부터 탐색
for (int i = 1; i <= r_size; i++) {
for (auto c : check[i]) {
if (c == 0)
continue;
cnt++;
for (int j = i + 1; j <= r_size; j++) {
for (int jj = 0; jj < check[j].size(); jj++) {
if ((c&check[j][jj]) == c) {
check[j][jj] = 0;
}
}
}
}
}
return cnt;
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스] 짝지어 제거하기 (0) | 2020.03.15 |
---|---|
[프로그래머스] 도둑질 (0) | 2020.03.15 |
[프로그래머스] 조이스틱 (0) | 2020.03.10 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2020.03.08 |
[프로그래머스] 괄호 변환 (0) | 2020.03.08 |
Comments