Java

[프로그래머스] 후보키

프로버티기 2025. 4. 3. 10:25

문제

 

https://school.programmers.co.kr/learn/courses/30/lessons/42890

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 


 

 

코드 

 

import java.io.*;
import java.util.*;
class Solution {
    public int solution(String[][] relation) {
        int answer = 0;
        int N = relation.length;
        int M = relation[0].length;
        List<Integer> keys = new ArrayList<>();
        for(int c = 1; c < (1 << M); c++){
            Set<String> set = new HashSet<>();
            for(int i = 0; i < N; i++) {
                String key = "";
                for(int j = 0; j < M; j++){
                    if((c & (1 << j)) > 0){
                        key+= relation[i][j];
                    }
                }
                set.add(key);
            }
            if(set.size() == N && check(keys, c)){
                keys.add(c);
            }
        }
        return keys.size();
    }
    
    static boolean check(List<Integer> keys, int newKey) {
        for(int key : keys){
            if((key & newKey) == key){
                return false;
            }
        }
        return true;
    }
}
// 유일성, 최소성

'Java' 카테고리의 다른 글

[백준] 3020 : 개똥벌레  (0) 2025.04.06
[백준] 2098 : 외판원 순회  (0) 2025.04.06
[프로그래머스] 뒤에 있는 큰 수 찾기  (0) 2025.04.02
[백준] 17472 : 다리 만들기 2  (0) 2025.04.01
[백준] 14890 : 경사로  (0) 2025.04.01