Algorithm
백준_오목_2615
Young_J
2021. 1. 4. 22:49
// 알고리즘
1. 구현
2. 탐색 배열 사용
-> 원래 8방 탐색을 해야하지만 왼쪽 위부터 검사한다면 4방 탐색으로도 가능
-> 우상, 우, 우하, 하
더보기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 오목_2615_re {
static int[] dr = { -1, 0, 1, 1 };
static int[] dc = { 1, 1, 1, 0 };
static int[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
map = new int[20][20];
for (int i = 1; i <= 19; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int j = 1; j <= 19; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
boolean flag = false;
for (int r = 1; r <= 19; r++) {
for (int c = 1; c <= 19; c++) {
if (map[r][c] == 0)
continue;
for (int k = 0; k < 4; k++) {
int num = 1;
int cnt = 1;
while (true) {
int nr = r + dr[k] * cnt;
int nc = c + dc[k] * cnt;
if (check(nr, nc))
break;
if (map[nr][nc] != map[r][c])
break;
num++;
cnt++;
}
if (num == 5) {
int nr = r + dr[k] * -1;
int nc = c + dc[k] * -1;
if (check(nr, nc)) {
System.out.println(map[r][c]);
System.out.printf("%d %d\n", r, c);
flag = true;
} else {
if (map[nr][nc] != map[r][c]) {
System.out.println(map[r][c]);
System.out.printf("%d %d\n", r, c);
flag = true;
}
}
}
}
}
}
if (!flag) {
System.out.println(0);
}
}
private static boolean check(int nr, int nc) {
if (nr < 0 || nc < 0 || nr >= 20 || nc >= 20)
return true;
return false;
}
}
※ 옛날에 400줄을 넘게 코딩해서 통과했던 코드인데 다시 풀어서 짧게 코딩함.
해당방향으로 최대한내려가서 5일때 왔던 방향의 반대로 다시 가는 코드가 있어야 하는데 안해서 여러번 틀림...
쉬운 구현문제도 자주 풀어봐야할듯