public class DQuads
{
public int count(String[] flights) {
int n = flights.length;
int count=0;
int[][] a = new int[n][n];
for (int i=0; i < n; i++) {
if(flights[i].length() == 0) continue;
String[] s = flights[i].split(" ");
for (int j=0; j < s.length; j++)
a[i][Integer.parseInt(s[j])]++;
}
for (int i=0; i < n; i++) {
for (int j=0; j < n; j++) {
for (int k=0; k < n; k++) {
for (int l=0; l < n; l++) {
if(i==j || i==k || i==l || j==k || j==l || k==l) continue;
if(a[i][j]==0 || a[j][k]==0 || a[k][l]==0 || a[l][i]==0) continue;
if(a[i][k]>0 || a[k][i]>0 || a[j][l]>0 || a[l][j]>0) continue;
count += a[i][j]*a[j][k]*a[k][l]*a[l][i];
}
}
}
}
return count/4;
}
}
Explanation
1번째 for문
각 요소에 있는 숫자를 인덱스에 넣고 1씩 증가시킨다.
2번째 for문
각 i,j,k,l 이 같거나 값이 0이거나 대각선 방향으로 서로 연결되 있으면 continue 된다.
모든 요소를 돌면서 서로 연결되어 있는 꼭지점을 찾아 count에 저장한다. 중복되는 요소들 있기 때문에 전부 곱해줘야 한다.
References
최근 덧글