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로 바꾼 것 말고 똑같음