[JAVA] SWEA 1220 - Magnetic

hyng·2022년 1월 14일
0

SWEA

목록 보기
10/78

solution

푸른 자성체의 경우 위로 끌리게 되기 때문에, 위에 반대되는 어떤 자성체도 없다면 교착상태가 발생하지 않게 된다.
붉은 자성체의 경우 아래로 끌리게 되기 때문에, 아래에 반대되는 어떤 자성체도 없다면 교착상태가 발생하지 않게 된다.

이것을 단순하게 생각하면 처음 자성체를 봤을때,
붉은색이라면 아래처럼 여러 상황을 가정할 수 있다. (위에서 아래 방향으로 본다고 가정)

  1. 빨(현재 자성체) - 푸
    서로 반대되는 자성체이다. -> 교착상태가 발생한다.
  2. 빨(현재 자성체) - 빨
    같은 성질의 자성체이다. -> 교착상태가 발생하지 않는다.

=> 자성체를 봤을 때, 붉은색이라면 다음 자성체를 보고 푸른색일 경우 교착상태를 카운팅 해준다.

푸른색이라면 아래처럼 여러 상황을 가정할 수 있다. (위에서 아래 방향으로 본다고 가정)

  1. 빨 - 푸 - 푸(현재 자성체)
    현재의 상태는 하나의 교착상태로 본다. 그래서 1로 카운팅을 해주어야 하는데,
    이미 교착상태 카운팅은 앞에서 해주었을 것이기 때문에(빨-푸), 카운팅을 해주지 않아도 된다. -> 그냥 넘어간다.
  2. 빨 - 푸(현재 자성체)
    교착 상태가 발생했지만, 이미 이전에 빨간색 자성체를 보고 교착상태를 카운팅 해주었을것이기때문에(빨-푸), 카운팅을 해주지 않아도 된다. -> 그냥 넘어간다.
  3. 푸 - 푸(현재 자성체)
    교착 상태가 발생하지 않았다 -> 그냥 넘어간다.

=> 처음 자성체를 봤을 때, 푸른색이라면 별다른 조치 없이 그냥 넘어가도 된다.

code

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;
    }
}
  1. 푸른자성체인지 확인 후, 맞다면 넘어간다.

    if(map[j][i] == 0 || map[j][i] == 2){
    	continue;
    }
  2. 붉은 자성체인지 확인 후, 맞다면 아래 푸른 자성체가 있는지 확인한다.

  for(int k=j+1; k<N; k++){ //행 아래를 보는것
      j = k;
      if(map[k][i] == 2){
          count++;
          break;
       }
  }
profile
공부하고 알게 된 내용을 기록하는 블로그

0개의 댓글