푸른 자성체의 경우 위로 끌리게 되기 때문에, 위에 반대되는 어떤 자성체도 없다면 교착상태가 발생하지 않게 된다.
붉은 자성체의 경우 아래로 끌리게 되기 때문에, 아래에 반대되는 어떤 자성체도 없다면 교착상태가 발생하지 않게 된다.
이것을 단순하게 생각하면 처음 자성체를 봤을때,
붉은색이라면 아래처럼 여러 상황을 가정할 수 있다. (위에서 아래 방향으로 본다고 가정)
=> 자성체를 봤을 때, 붉은색이라면 다음 자성체를 보고 푸른색일 경우 교착상태를 카운팅 해준다.
푸른색이라면 아래처럼 여러 상황을 가정할 수 있다. (위에서 아래 방향으로 본다고 가정)
=> 처음 자성체를 봤을 때, 푸른색이라면 별다른 조치 없이 그냥 넘어가도 된다.
import java.util.*;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
StringBuffer sb = new StringBuffer();
int T = 10;
for(int tc=1; tc<=T; tc++){
sb.append("#").append(tc).append(" ");
int N = sc.nextInt();
int map[][] = new int[N][N];
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
map[i][j] = sc.nextInt();
}
}
sb.append(solve(N, map)).append("\n");
}
System.out.println(sb);
}
static int solve(int N, int map[][]){
int count = 0;
//1=빨, 2=파
for(int i=0; i<N; i++){ //열
for(int j=0; j<N; j++) //행
{
if(map[j][i] == 0 || map[j][i] == 2){
continue;
}
for(int k=j+1; k<N; k++){ //행 아래를 보는것
j = k;
if(map[k][i] == 2){
count++;
break;
}
}
}
}
return count;
}
}
푸른자성체인지 확인 후, 맞다면 넘어간다.
if(map[j][i] == 0 || map[j][i] == 2){
continue;
}
붉은 자성체인지 확인 후, 맞다면 아래 푸른 자성체가 있는지 확인한다.
for(int k=j+1; k<N; k++){ //행 아래를 보는것
j = k;
if(map[k][i] == 2){
count++;
break;
}
}