Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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 29 30 31
Archives
Today
Total
관리 메뉴

csct3434

[level 2] 후보키 - 42890 본문

프로그래머스

[level 2] 후보키 - 42890

csct3434 2024. 2. 28. 20:07

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.HashSet;
import java.util.LinkedList;

class Solution {

    public int solution(String[][] relation) {
        int rows = relation.length;
        int cols = relation[0].length;

        LinkedList<Integer> superKeys = new LinkedList<>();

        for (int mask = 1; mask < (1 << cols); mask++) {
            HashSet<String> uniqueIndexes = new HashSet<>();

            for (String[] record : relation) {
                StringBuilder index = new StringBuilder();

                for (int i = 0; i < cols; i++) {
                    if ((mask & (1 << i)) != 0) {
                        index.append(record[i]).append(" ");
                    }
                }

                uniqueIndexes.add(index.toString());
            }

            if (uniqueIndexes.size() == rows) {
                superKeys.add(mask);
            }
        }

        LinkedList<Integer> candidateKeys = new LinkedList<>();

        for (Integer superKey : superKeys) {
            boolean duplicate = candidateKeys.stream()
                .anyMatch(candidateKey -> (superKey & candidateKey) == candidateKey);

            if (!duplicate) {
                candidateKeys.add(superKey);
            }
        }

        return candidateKeys.size();
    }
}

'프로그래머스' 카테고리의 다른 글

[level 2] 스킬트리 - 49993  (0) 2024.02.29
[level 2] 타겟 넘버 - 43165  (0) 2024.02.29
[level 2] 오픈채팅방 - 42888  (0) 2024.02.28
[level 2] 구명보트 - 42885  (0) 2024.02.28
[level 2] 큰 수 만들기 - 42883  (0) 2024.02.28