[JAVA] 백준 2615 - 오목
문제 이해
오목인 바둑알 색깔을 찾으면 된다. 무승부 없고, 한 색깔이 여러번 오목인 것도 없다.
주의할 점은 육목 안됨 & 인덱스
문제 풀이
y=x 방향, y=0 방향, y=-x방향, x=0 방향으로 오목인지 탐색하면 된다.
인덱스를 정말 ! 주의해야 한다 !!
(인덱스 잘못 설정해서 백준 채점이 자꾸 틀렸다고 떴다. 정올으로 넘어가서 채점하니까 어떤 테스트케이스에서 틀렸는지 알려준 덕분에 쉽게 찾을 수 있었다.)
- 바둑알이 있을 때만 오목인지 확인
- 해당 위치에서 4개의 방향을 탐색하며 오목인지 확인
- 총 5번 인덱스가 넘어가지 않고, 색깔이 같으면 오목 후보
- 육목인지 체크 : 오목의 양 옆 체크 (인덱스 넘어가지 않고, 색깔이 다르면 오목 확정)
- 오목 확정되면 print 하고 전체 for문 종료
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int[] dx = {1,1,1,0};
static int[] dy = {-1,0,1,1};
public static void main(String[] args) throws IOException {
char[][] baduk = new char[19][19];
//입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 19; i++) {
baduk[i] = br.readLine().replace(" ", "").toCharArray();
}
int win = 0;
ite : for (int i = 0; i < 19; i++) {
for (int j = 0; j < 19; j++) {
if(baduk[i][j] == '0') continue;
for(int k = 0; k < 4; k++) { //4방 탐색
int count = 0;
for(int b=0;b<5;b++) { //오목 체크
int X = i + dy[k]*b;
int Y = j + dx[k]*b;
if(X < 0 || Y < 0 || X >=19 || Y >=19) break; //인덱스 넘어가면 break
if(baduk[i][j] != baduk[X][Y]) break; //색깔 다르면 break
count++;
if(count == 5) { //오목이면
X = i - dy[k]; //육목인지 체크
Y = j - dx[k];
if(X >= 0 && Y >= 0 && X < 19 && Y < 19) {
if(baduk[i][j] == baduk[X][Y]) break;
}
X = i + dy[k]*5; //육목인지 체크
Y = j + dx[k]*5;
if(X >= 0 && Y >= 0 && X < 19 && Y < 19) {
if(baduk[i][j] == baduk[X][Y]) break;
}
win = baduk[i][j] - '0'; //육목 아니면 print 후 종료
System.out.println(win);
System.out.println((i+1) + " " + (j+1));
break ite;
}
}
}
}
}
if(win == 0) System.out.println(win);
br.close();
}
}
Author And Source
이 문제에 관하여([JAVA] 백준 2615 - 오목), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@h3707/JAVA-백준-2615-오목저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)