[伯俊]オーガニック白菜(ジャワ)
アルゴリズムの問題解決をブログにアップロードしたのは、コードを解答し、記録するためです.
これからは質問を吹き飛ばすよりも、リンクだけを残して、答えを見極めるために、私たちは皆さんに位置づけます!
📄 質問する
のコアは
-xのみを1マス上へ、右へ1マス(右)
-y-1のみの場合は、セルを下に移動します(下)
-xが-1の場合のみ、左に1マス移動(左)
-yのみを1マス(上) 上へ移動
これからは質問を吹き飛ばすよりも、リンクだけを残して、答えを見極めるために、私たちは皆さんに位置づけます!
📄 質問する
[伯俊]有機白菜
👩💻 に答える
1.問題を理解する
この問題は、関連する白菜のグループの総数を検索し、各グループにミミズを割り当てます.
これは必要なミミズの総数を得る問題である.
前の[プログラマ]ネットワーク(Java)2[伯俊]ウイルス(Java)題と似ているような気がします.
しかし,単純ノードとして接続するのではなく,上述した2次元配列形式で探索する点が異なる.
2.解答
1.問題を理解する
この問題は、関連する白菜のグループの総数を検索し、各グループにミミズを割り当てます.
これは必要なミミズの総数を得る問題である.
前の[プログラマ]ネットワーク(Java)2[伯俊]ウイルス(Java)題と似ているような気がします.
しかし,単純ノードとして接続するのではなく,上述した2次元配列形式で探索する点が異なる.
2.解答
static int[] dx = { 1, 0, -1, 0 };
とstatic int[] dy = { 0, -1, 0, 1 };
です-xのみを1マス上へ、右へ1マス(右)
-y-1のみの場合は、セルを下に移動します(下)
-xが-1の場合のみ、左に1マス移動(左)
-yのみを1マス(上)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int M, N, K;
static int[][] arr;
static boolean[][] visit;
static int[] dx = { 1, 0, -1, 0 };
static int[] dy = { 0, -1, 0, 1 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
for(int i = 0; i < T; i++) { // 테스트 케이스 반복
int larva = 0;
st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken()); // 배추밭 가로 길이
N = Integer.parseInt(st.nextToken()); // 배추밭 세로 길이
K = Integer.parseInt(st.nextToken()); // 배추 위치 개수
arr = new int[M][N];
visit = new boolean[M][N];
for(int j = 0; j < K; j++) {
st = new StringTokenizer(br.readLine());
int X = Integer.parseInt(st.nextToken());
int Y = Integer.parseInt(st.nextToken());
arr[X][Y] = 1;
}
// 핵심 로직 실행
for (int k = 0; k < M; k++) {
for (int l = 0; l < N; l++) {
if (arr[k][l] == 1 && !visit[k][l]) {
bfs(k, l);
larva++;
}
}
}
sb.append(larva).append("\n");
}
System.out.println(sb.toString().trim());
}
static void bfs(int x, int y) {
Queue<int[]> qu = new LinkedList<int[]>();
qu.add(new int[] { x, y });
while (!qu.isEmpty()) {
x = qu.peek()[0];
y = qu.peek()[1];
visit[x][y] = true;
qu.poll();
for (int i = 0; i < 4; i++) { // 시계방향으로 도는 네모
int cx = x + dx[i];
int cy = y + dy[i];
if (cx >= 0 && cy >= 0 && cx < M && cy < N) { // 밭 범위 안에 있으면서
if (!visit[cx][cy] && arr[cx][cy] == 1) { // 방문하지 않았고, 배추가 있으면
visit[cx][cy] = true;
qu.add(new int[] { cx, cy });
}
}
}
}
}
}
Reference
この問題について([伯俊]オーガニック白菜(ジャワ)), 我々は、より多くの情報をここで見つけました https://velog.io/@geesuee/백준-유기농-배추자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol