문제에 제시된 시각자료 때문에 어떻게 탐색할지 조금 헤맸음.
제시된 조건에 없다면 괜히 시간 들여서 고민하지 말자.
단순하게 1과 2가 각각 위 아래로 탐색할 때 만난다면 교착상태++ 해줬음. 이때 중복이 발생하므로 2로 나눠줬다.
내 코드
메모리 : 32456 KB
시간 : 146 ms
코드길이 : 1882 B
[내 코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static int[][] graph;
static int result;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
for(int t = 1; t <= 10; t++) {
sb.append('#').append(t).append(' ');
int length = Integer.parseInt(br.readLine());
graph = new int[100][100];
result = 0;
//그래프입력
for(int row = 0; row < 100; row++) {
st = new StringTokenizer(br.readLine());
for(int column = 0; column < 100; column++) {
graph[row][column] = Integer.parseInt(st.nextToken());
}
}
for(int column = 0; column < 100; column++) {
search(column);
}
result /= 2;
sb.append(result).append('\n');
}
System.out.print(sb);
}
public static void search(int column) {
for(int row = 0; row < 100; row++) {
//1(N)이면 아래 탐색
if(graph[row][column] == 1) {
//row가 99이면 빠져나감
if(row == 99)
graph[row][column] = 0;
else {
//아래가 같은 1(N)이면 아무것도x
//아래가 2(S)이면 교착상태.
if(graph[row + 1][column] == 2)
result++;
//아래가 0이면 밑으로 내려줌
else if(graph[row + 1][column] == 0) {
graph[row][column] = 0;
graph[row + 1][column] = 1;
}
}
}
//2(S)이면 위 탐색
else if(graph[row][column] == 2) {
//row가 0이면 빠져나감
if(row == 0)
graph[row][column] = 0;
else {
//위가 같은 2(S)이면 아무것도x
//위가 1(N)이면 교착상태.
if(graph[row - 1][column] == 1)
result++;
//위가 0이면 위로 올려줌
else if(graph[row][column] == 0) {
graph[row][column] = 0;
graph[row - 1][column] = 2;
}
}
}
}
}
}
'SSAFY > SWEA' 카테고리의 다른 글
[SWEA] 1225 : 암호생성기 (0) | 2023.04.27 |
---|---|
[SWEA] 1221 : GNS (0) | 2023.04.27 |
[SWEA] 1217 : 거듭제곱 (0) | 2023.04.27 |
[SWEA] 1216 : 회문 2 (0) | 2023.04.27 |
[SWEA] 1244 : 최대 상금 (0) | 2023.04.26 |