[Baekjoon] 28256_์ด์ฝ๋ฆฟ ๋ณด๊ดํจ
๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/28256)
< ์ด์ฝ๋ฆฟ ๋ณด๊ดํจ >
๋ฌธ์ ํ์ด
์ด์ฝ๋ฆฟ์ด ์๋ ๊ณณ์์ ์ํ์ข์ฐ๋ฅผ ํ์ํ์ฌ ์ด์ฝ๋ฆฟ์ด ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _28256_ { // ์ด์ฝ๋ฆฟ ๋ณด๊ดํจ
static char arr[][];
static boolean visited[][];
static int dx[] = { -1, 1, 0, 0 };
static int dy[] = { 0, 0, -1, 1 };
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int T = Integer.parseInt(bf.readLine());
for (int i = 0; i < T; i++) {
arr = new char[3][3];
visited = new boolean[3][3];
for (int j = 0; j < 3; j++) {
String str = bf.readLine();
for (int k = 0; k < 3; k++) {
arr[j][k] = str.charAt(k);
}
}
ArrayList<Integer> result = new ArrayList<>();
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
if (arr[j][k] == 'O' && !visited[j][k]) {
visited[j][k] = true;
result.add(search(j, k, 1));
}
}
}
Collections.sort(result);
st = new StringTokenizer(bf.readLine());
int num = Integer.parseInt(st.nextToken());
int answer[] = new int[num];
boolean flag = false;
for (int j = 0; j < num; j++) {
answer[j] = Integer.parseInt(st.nextToken());
}
if (result.size() != num) {
bw.write("0\n");
} else {
for (int j = 0; j < num; j++) {
if (result.get(j) != answer[j]) {
bw.write("0\n");
flag = true;
break;
}
}
if (!flag) {
bw.write("1\n");
}
}
}
bw.flush();
}
private static int search(int a, int b, int cnt) {
Queue<int[]> queue = new LinkedList<>();
queue.add(new int[] { a, b });
while (!queue.isEmpty()) {
int info[] = queue.poll();
for (int i = 0; i < 4; i++) {
int x = info[0] + dx[i];
int y = info[1] + dy[i];
if (x >= 0 && x < 3 && y >= 0 && y < 3 && arr[x][y] == 'O' && !visited[x][y]) {
visited[x][y] = true;
cnt += 1;
queue.add(new int[] { x, y });
}
}
}
return cnt;
}
}
๋ณ์)
T : ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์
arr : ์ด์ฝ๋ฆฟ ๋ณด๊ดํจ ์ํ
visited : ๋ฐฉ๋ฌธ ์ฌ๋ถ
result : ์ด์ฝ๋ฆฟ ๋ณด๊ดํจ ๊ฒฐ๊ณผ
num : ํ๋ฉด์ ํ์๋ ์ซ์์ ๊ฐ์
answer : ํ๋ฉด์ ํ์๋ ์ซ์ ์ ๋ณด
flag : ์ผ์น ์ฌ๋ถ
ํ ์คํธ ์ผ์ด์ค ๊ฐ์๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ํ ์คํธ ์ผ์ด์ค ์๋งํผ ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) ์ด์ฝ๋ฆฟ ๋ณด๊ดํจ ์ํ๋ฅผ ์ ๋ ฅ๋ฐ์ arr์ ์ ์ฅํ๋ค.
2) ์ด์ฝ๋ฆฟ ๋ณด๊ดํจ์ ์ดํด๋ณด๋ฉฐ ์ด์ฝ๋ฆฟ์ด ์๋ค๋ฉด search ํจ์๋ฅผ ํธ์ถํ๋ค. ๋ฐํ๊ฐ์ result์ ์ ์ฅํ๋ค.
3) result๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
4) ํ๋ฉด์ ํ์๋ ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ๊ทธ ์๋งํผ ์ซ์๋ฅผ ์ ๋ ฅ๋ฐ์ answer ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
5) result์ answer์ ๋น๊ตํ๋ฉฐ ์ผ์นํ๋ฉด 1์ ์ผ์นํ์ง ์๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ค.
search(์ด์ฝ๋ฆฟ ์์น, 1)
Queue์ ์ด์ฝ๋ฆฟ ํ์ฌ ์์น๋ฅผ ์ ์ฅํ๋ค. Queue๊ฐ ๋น ๋๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
1) queue์์ ๊ฐ ๊บผ๋ด๊ธฐ
2) ์ํ์ข์ฐ๋ฅผ ํ์ํ๋ฉฐ ์ด์ฝ๋ฆฟ์ด ์๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ cnt+1 ๋ฐ queue์ ์์น ์ ์ฅ
cnt ๋ฐํ