https://school.programmers.co.kr/learn/courses/30/lessons/42890
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
import java.util.*;
class Solution {
public int solution(String[][] relation) {
int answer = 0;
int rowCount = relation.length;
int columnCount = relation[0].length;
// ์ธ๋ฑ์ค ๋ฐฐ์ด ์ด๊ธฐํ
List<Integer> arr = new ArrayList<>();
for (int i = 0; i < columnCount; i ++){
arr.add(i);
}
List<List<Integer>> except = new ArrayList<>();
for (int i = 1; i <= columnCount; i ++){
List<List<Integer>> result = new ArrayList<>();
combination(arr, new boolean[columnCount], 0, i, result); // ์กฐํฉ ๊ตฌํ๊ธฐ
result = removeExceptCombination(result, except);
for(List<Integer> indexes : result) {
Set<String> set = getCombinationContents(relation, indexes);
if(set.size() == rowCount){
answer += 1;
except.add(indexes);
}
}
}
return answer;
}
// ๋ฐฑํธ๋ํน ์ด์ฉํด์ ์กฐํฉ๊ตฌํ๊ธฐ
public void combination(List<Integer> arr, boolean[] visit, int start, int r, List<List<Integer>> result){
if (r == 0){
List<Integer> visitIndex = new ArrayList<>();
for (int i = 0; i < visit.length; i++){
if(visit[i])
visitIndex.add(arr.get(i));
}
result.add(visitIndex);
return;
}else {
for (int i = start; i< arr.size(); i ++){
visit[i] = true;
combination(arr, visit, i + 1, r - 1, result);
visit[i] = false;
}
}
}
// ์ธ๋ฑ์ค ์กฐํฉ set ๊ตฌํ๊ธฐ
public Set<String> getCombinationContents(String[][] relation, List<Integer> indexes){
Set<String> result = new HashSet<>();
for (String[] row : relation){
String contents = "";
for (Integer index : indexes){
contents = contents + row[index];
}
result.add(contents);
}
return result;
}
public List<List<Integer>> removeExceptCombination(List<List<Integer>> target, List<List<Integer>> except) {
if (except.isEmpty())
return target;
List<List<Integer>> remove = new ArrayList<>();
for (int i = 0; i < target.size(); i ++){
for (int j = 0; j < except.size(); j++){
if (target.get(i).containsAll(except.get(j))){
remove.add(target.get(i));
break;
}
}
}
target.removeAll(remove);
return target;
}
}
๋ฐฑํธ๋ฆฌํน์ผ๋ก ์กฐํฉ๊ตฌํ๊ธฐ
- ๊ฑฐ์ 3์ค ๋ฐ๋ณต๋ฌธ์ธ๋ฐ ํ์์์๋์ง๋ ์์๋ค.
- ์ฒ์์๋ ํ๋ณดํค๋ก ํ๋ณ๋ ์ธ๋ฑ์ค๋ฅผ ํ๋์ฉ ๋ชจ๋ ์ญ์ ํด์คฌ๋๋ฐ ์กฐํฉ์ผ๋ก ์ญ์ ํด์ค์ผ ํ๋ค.
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] N๊ฐ์ ์ต์๊ณต๋ฐฐ์(Java) (0) | 2023.12.01 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ ๊ฐ์ (Python) (1) | 2022.12.21 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ ์ฐพ๊ธฐ, ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Python) (2) | 2022.11.24 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ซ์ ์ง๊ฟ (Python) (0) | 2022.10.19 |
[๋ฐฑ์ค] 11055 - ๊ฐ์ฅ ํฐ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (DP) (0) | 2022.10.12 |
๋๊ธ