✔ Magnetic
문제 분석하기
위아래로 1(빨강 N극)2(파랑 S극)이 있을 경우 움직이지 못하는 교착 상태가 되게 됨
손으로 풀어보기
- 100 x 100 배열에 테이블 정보를 저장
- 한 줄 씩 위에서 아래로 내려오면서 확인
- 1일 경우 flag를 true로 변환
- 2일 경우 이전에 1이 있어 flag가 true이라면 교착 상태 갯수 증가
- 1, 2가 함께 교착 상태 1개가 되어 갯수가 증가 되었으므로 flag를 다시 false로 변경 후 반복
- 한 줄을 완료한 후 flag를 false로 변경
- 교착상태 갯수 반환
슈도코드 작성하기
T(테스트 케이스 수) = 10
for(T만큼) {
n(정사각형 테이블의 한 변의 길이)
arr(자성체 저장 2차원 배열 (100 x 100 만큼))
for(i -> arr.length만큼) {
for (j -> arr.length만큼) {
arr[i][j] = 자성체 저장
}
}
answer(교착상태 갯수)
flag(1을 만났는지 여부)
for(i -> arr.length만큼) {
for (j -> arr.length만큼) {
if(arr[j][i] == 0) {
continue
}
if(arr[j][i] == 1) {
flag = true;
}
if(arr[j][i] == 2 && 앞에 1이 있다면) {
answer 증가
flag = false;
}
}
flag = false;
}
#T와 answer 반환
}
코드 구현하기
/**
* 1220) Magnetic
*/
public class D001_1220 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
// T(테스트 케이스 수) = 10
int T = 10;
// T만큼
for (int test_case = 1; test_case <= T; test_case++) {
// n(정사각형 테이블의 한 변의 길이)
int n = sc.nextInt();
// arr(자성체 저장 2차원 배열 (100 x 100 만큼))
int[][] arr = new int[n][n];
// 자성체 저장
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
arr[i][j] = sc.nextInt();
}
}
// answer(교착상태 갯수)
int answer = 0;
// flag(1을 만났는지 여부)
boolean flag = false;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
// 자성체가 없을 경우
if (arr[j][i] == 0) {
continue;
}
// 자성체가 1(빨강 N극)일 경우
if (arr[j][i] == 1) {
flag = true;
}
// 자성체가 2(파랑 S극)이며 위에 자성체가 1(빨강 N극)인 것이 있을 경우
// 12가 되므로 교착 상태
if (arr[j][i] == 2 && flag) {
// 교착 상태 증가
answer++;
flag = false;
}
}
flag = false;
}
// #T와 answer 반환
System.out.println("#" + test_case + " " + answer);
}
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[1222] 계산기1 (0) | 2023.11.19 |
---|---|
[1221] GNS (0) | 2023.11.18 |
[1219] 길찾기 (0) | 2023.11.17 |
[1218] 괄호 짝짓기 (0) | 2023.11.17 |
[1217] 거듭 제곱 (0) | 2023.11.17 |