아래의 테스트케이스를 돌려보세요!!
{ {"a","1","aaa","c","ng"},
{"a","1","bbb","e","g"},
{"c","1","aaa","d","ng"},
{"d","2","bbb","d","ng"}};
결론 : 해당 테스트케이스의 답은 5입니다. 근데 5로 안나올걸..??ㅎㅎㅎ
해당문제를 구현하는 방법은 다양하지만 대부분 유일성을 만족하는 케이스 중 최소성을 만족하지 못하는 케이스를 제거하는 방법을 택했을 것이라고 생각합니다.
위의 테스트 케이스에서 유일성을 만족하는 경우는
02, 03, 04, 13, 23, 012, 013, 014, 023, 024, 034, 123, 134, 234, 0123, 0124, 0134, 0234, 1234, 01234 이와 같습니다. (EX) 02는 0번째열과 2번째열을 의미합니다. , 012는 0번째열, 1번째열, 2번째열을 의미합니다.)
근데 02를 기준으로 find를 할경우 문제가 발생합니다. 023은 제거가 되지만 012는 제거가 안됩니다.
그래서 02로 find를 하지않고 0과 2를 개별적으로 찾아서 최소성을 만족하지 못하는 케이스를 제거하는 방법을 선택했습니다.
그래서 최소성을 만족하지 못하는 케이스를 모두 제거하면
02, 03, 04, 13, 23 다음과 같은 결론이 나옵니다.
부디, 답변이 도움이 되셨으면 좋겠네요.
이 부분 때문에 시간을 많이 썼는데, 큰 도움이 됐네요ㅜ 왜 이걸 생각 못했을까요.. 고맙습니다ㅎㅎ
딱 여기서 헤매고 있었는데 써주신 팁 보고 바로 해결했네요 감사합니다!
감사합니다 ㅜㅜㅜ
감사합니다!!
감사합니다...
위 테스트케이스의 답이 어떻게 5가 되나요?? ㅠㅠ 02 가 후보키가 될 수 있으니까, 01234는 최소성을 갖지 않는다고 이해했는데 ㅠㅠ
감사합니다 덕분에 많은 도움이 됐어요!!
감사합니다
감사합니다
감사합니다
감사합니다!
큐를 써서 유일성 만족이 안되는 경우에만 제일 마지막 요소 보다 큰 column idx 를 추가하면 최소성이 만족 될 줄 알았는데 제공해주신 반례를 넣어보니 0, 2 가 통과 되고 난 후 0, 1, 2 가 들어가는 걸 확인했습니다.. 반만 걸러내고 있었네요 ㅋㅋ... 덕분에 최소성 체크 함수를 만들어서 해결했습니다.