1) SW Expert Academy 정책상 문제 자체를 퍼가는 것은 금지되며 링크와 출처로 명시해 주시기 바랍니다.
2) 문제에 대한 본인의 풀이에 대해서는 개인 학습 등 상업적 용도가 아닌 경우에만 문제 출처와 함께 게시가 가능합니다.
※ 저작권 이슈가 있을 시 법적 제재를 받을 수 있으니 참고하여주시기 바랍니다.
문제 설명
나의 풀이
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T =10;
for(int test_case = 1; test_case <= 10; test_case++) {
int size = sc.nextInt();
int[][] array = new int[size][size];
int count = 0;
for(int x = 0; x < size; x++) {
for(int y = 0; y < size; y++) {
array[x][y] = sc.nextInt(); // x=행, y=열
}
} // 2차원 배열 완성
for(int i = 0; i < size; i++) { // 전체 업데이트
for(int x = 0; x < size; x++) {// 전체 1번 업데이트
for(int y = 0; y < size; y++) {
//0,0이 0인지 1인지 2인지 우선 체크부터 해야함
if(array[y][x] == 1) { // 빨강
if(y == size-1) { // 좌표가 맨 아래인 경우
array[y][x] = 0;
}else if(array[y+1][x] == 0){ // 아래가 0인 경우
array[y+1][x] = 1; // 밑으로 이동
array[y][x] = 0; // 원래 있던 위치에 0으로 치환
}
}
if(array[y][x] == 2) { // 파랑
if(y == 0) { // 좌표가 맨 위인 경우
array[y][x] = 0;
}else if(array[y-1][x] == 0){ // 위가 0인 경우
array[y-1][x] = 2; // 위로 이동
array[y][x] = 0; // 원래 있던 위치에 0으로 치환
}
}
}
}
}// 배열 이동 완료
// 교착 상태는 위에가 빨강 아래가 파랑 형태이다. 빨간색 아래위치가 파란색이면 +1
for(int x = 0; x < size; x++) {
for(int y = 0; y < size; y++) {
if(array[y][x] == 1) {
if(array[y+1][x] == 2) {
count++;
}
}
}
} // 2차원 배열 완성
System.out.println("#" + test_case + " " + count);
}// test_case
sc.close();
}
}
다른 풀이
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
/*
푸른 자성체 : N극에 이끌리는 성질, 붉은 자성체 : S극에 끌리는 성질
각 자성체가 끌리면서 다른 색상과 충돌하면 교착 상태에 빠짐.
교착상태의 개수를 구하라.
입력
10개의 테스트 케이스
테스트 케이스의 첫번째 입력 줄 : 정사각형 테이블의 한변의 길이 N(항상 100)
각 행의 입력을 한줄에 받음.
1은 S극에 이끌리는 성질, 0은 N극에 이끌리는 성질
테이블의 윗부분은 N극, 아랫부분은 S극
1은 아래 부분인 S극에 이끌린다.
2는 윗부분인 N극에 이끌린다.
*/
public class Solution {
public static void main(String[] args) throws FileNotFoundException {
System.setIn(new FileInputStream("src/samsung_academy/level_3/magnetic/input.txt"));
Scanner sc = new Scanner(System.in);
// 테스트 케이스 반복
for (int tc = 1; tc <= 10; tc++) {
int lineSize = sc.nextInt();
int[][] table = new int[lineSize][lineSize];
int cnt = 0;
// 테이블에 입력받은 자성체들을 저장한다.
for (int row = 0; row < lineSize; row++) {
for (int col = 0; col < lineSize; col++) {
int inputValue = sc.nextInt();
table[row][col] = inputValue;
}
}
// row : 행, col : 열
// 왼쪽부터 오른쪽 탐색이 아닌 위부터 아래쪽 탐색을 실시한다.
// 1이 나오면, 2가 나올때까지 다음 번 자성체들을 검사한다.
// 이때, checkSecond 를 사용하여 1 다음 2가 아닌 단독으로 2먼저 나올경우를 배제시켜준다.
// checkSecond 가 true 라 함은 1이 2 이전에 나와서 2가 다음 자성체로 나올때까지 루프를 돌고 있음을 의미한다.
for (int col = 0; col < lineSize; col++) {
boolean checkSecond = false;
for (int row = 0; row < lineSize; row++) {
if (table[row][col] == 1) {
checkSecond = true;
continue;
}
if (table[row][col] == 2 && checkSecond) {
cnt++;
checkSecond = false;
}
}
}
System.out.println("#" + tc + " " + cnt);
}
}
}
'👨💻 Coding Test' 카테고리의 다른 글
[SW Expert Academy/Java/D3] 1221.GNS (0) | 2024.11.15 |
---|---|
[SW Expert Academy/Java/D3] 1217.거듭 제곱 (0) | 2024.11.12 |
[SW Expert Academy/Java/D3] 1215.회문1 (0) | 2024.11.10 |
[SW Expert Academy/Java/D3] 1213.String (0) | 2024.11.08 |
[SW Expert Academy/Java/D3] 1209.Sum (0) | 2024.11.08 |