티스토리 뷰
// 알고리즘
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일때 왔던 방향의 반대로 다시 가는 코드가 있어야 하는데 안해서 여러번 틀림...
쉬운 구현문제도 자주 풀어봐야할듯
'Algorithm' 카테고리의 다른 글
백준_가장 긴 증가하는 부분수열2_12015 (0) | 2021.01.06 |
---|---|
백준_가장 긴 증가하는 부분수열_11053 (0) | 2021.01.05 |
프로그래머스_가장 먼 노드 (0) | 2021.01.03 |
프로그래머스_카펫 (0) | 2020.12.31 |
프로그래머스_소수 찾기 (0) | 2020.12.30 |