for (int i = 1; i < (1 << cols); i++) {
System.out.println(i);
}
์ฒ์์๋ isUnique ํจ์๋ฅผ ๋ง๋ค์ด์ ๊ฒ์ฌํ์๋ค.
static boolean isUnique(LinkedList<String>[] list) {
for (int i = 0; i < list.length - 1; i++) {
for (int j = i+1; j < list.length; j++) {
if (list[i].equals(list[j])) {
return false;
}
}
}
return true;
}
ํ์ง๋ง ์ด๋ณด๋ค๋ HashSet ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ฉด ํจ์ฌ ๋น ๋ฅธ ์๋์ ๊ฐ๊ฒฐํ ์ฝ๋๋ก ์ค๋ณต ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์๋ค.
HashSet์ Set ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฅ ๋ํ์ ์ธ ์ปฌ๋ ์ ์ด๋ฉฐ, Set ์ธํฐํ์ด์ค์ ํน์ง๋๋ก HashSet์ ์ค๋ณต๋ ์์๋ฅผ ์ ์ฅํ์ง ์๋๋ค. ๋ง์ผ HashSet์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๋ ์์์ ์ค๋ณต๋ ์์๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค๋ฉด ์ด ๋ฉ์๋๋ค์ false๋ฅผ ๋ฐํํจ์ผ๋ก์จ ์ค๋ณต๋ ์์์ด๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์คํจํ๋ค๋ ๊ฒ์ ์๋ฆฐ๋ค. ๋ฐ๋ผ์ HashSet์ string ํํ๋ก ์ ํํ ์์๋ฅผ ์ ์ฅํ๊ณ , ๋ง์ง๋ง์ ๊ทธ set์ ํฌ๊ธฐ๊ฐ ์ ์ฒด ํํ๋ค์ ํฌ๊ธฐ์ ๋ง์ง ์๋ค๋ฉด ์ค๋ณต๋ ์์๊ฐ ์์์์ ์ ์ ์๋ค.
for (int i = 1; i < (1 << cols); i++) {
Set<String> set = new HashSet<>();
for (String[] row : relation) {
StringBuilder sb = new StringBuilder();
for (int k = 0; k < cols; k++) {
if ((i & (1 << k)) > 0)
sb.append(row[k]);
}
set.add(sb.toString());
}
if (set.size() == rows) {
boolean isExist = false;
for (Integer c : cand) {
if ((c & i) == c) {
isExist = true;
break;
}
}
if (!isExist) cand.add(i);
}
}