[Java] SWEA 1220 Magnetic

Lee GaEun·2024년 10월 28일

[Java] 알고리즘

목록 보기
7/93

1220 Magnetic 문제 링크

문제분석

  • 푸른 자성체는 N극에 이끌림, 붉은 자성체는 S극에 이끌림
  • 자성체들을 테이블에 두고 자기장을 걸었을 때, 발생하는 교착 상태의 개수를 구하라
  • 예시 :
  • A : S극에 이끌리면서 테이블 아래로 떨어짐
  • B : N극에 이끌리면서 테이블 아래로 떨어짐
  • D : 자성체의 개수와 자력의 크기는 상관없음
  • D : 같은 색의 자성체가 모여 붙어있는 상태는, 하나의 교착 상태임
  • E, F : 다른 색의 자성체가 엇갈려 붙은 상태는, 두 개 이상의 교착 상태로 봄

  • 위 예시의 경우 테이블 위의 교착상태는 7개

제약 사항

  • 테스트 케이스는 총 10개
  • 테이블의 크기는 100x100첫 번째 줄에는 정사각형 테이블의 한 변의 길이가 주어진다. (이 값은 항상 100이다)
  • 자성체는 테이블 앞뒤 쪽에 있는 N극 또는 S극에만 반응, 자성체끼리는 반응하지 않음
  • 항상 테이블의 윗부분에 N극, 아래부분에 S극이 위치함

입력 조건

  • 첫째 줄 : 정사각형 테이블의 한 변의 길이 (항상 100)
  • 둘째 줄 : 테이블의 초기 모습
  • 1: N극(S극에 끌림) / 2: S극(N극에 끌림)

출력 조건

  • #부호 + 공백 + 교착 상태의 개수

#1

  • for(i=100)
    • for(j=100)
      • list 세로 줄에 N이 있는지 탐색
      • 있으면 그 다음으로 S가 오는지 탐색
        ( 테이블의 위에 N극이 아래에 S극이 위치해 있기 때문에, 교착 상태가 만들어지려면, N극 자성체 아래에 S극 자성체가 있어야 함 )
  • 위 경우의 개수를 세면 교착상태 개수가 나옴
import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T = 10;

        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = sc.nextInt();
            int answer = 0;

            int[][] num = new int[100][100];
            for (int i = 0; i < 100; i++) {
                for (int j = 0; j < 100; j++) {
                    num[i][j] = sc.nextInt();
                }
            }

            for(int i=0; i<100; i++) {
                int n = 0;
                for(int j=0; j<100; j++) {
                    if(num[j][i] == 1) n++;
                    if(num[j][i] == 2 && n>=1) {
                        answer++;
                        n = 0;
                    }
                }
            }

            System.out.println("#" + test_case + " " + answer);
        }
    }
}

  • 성공!

5/1 다시 풀어봄

#2

20분


import java.util.HashMap;
import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T;
        T=10;

        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = sc.nextInt();
            int[][] arr = new int[N][N];
            for(int i=0; i<N; i++) {
                for(int j=0; j<N; j++) {
                    arr[i][j] = sc.nextInt();
                }
            }

            boolean cc = false;
            int answer = 0;
            for(int i=0; i<N; i++) {
                cc = false;
                for(int j=0; j<N; j++) {
                    if(arr[j][i] == 1) cc = true;
                    if(cc && arr[j][i] == 2) {
                        answer++;
                        cc = false;
                    }
                }
            }

            System.out.println("#"+test_case+" "+answer);
        }
    }
}
  • 변수 n에 저장했던 걸 boolean cc로 바꾼 것 말고 똑같음
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글