반응형
[광고 누르면 오늘의 행운 상승!!]
https://www.acmicpc.net/problem/7682
빡구현 문제
1. 참고사항
여러가지 까다로운 조건들이 있다. 전부 걸러주어야 한다.
2. 구현
- 가로, 세로, 대각선 검사를 통해 빙고 수를 알아낸다.
- 같은 라인 빙고가 여러개면 x
- X의 갯수가 O와 같으면 O가 이겨야 한다
- X가 더 크면 X가 이겨야 한다.
- 빙고가 하나도 없는 경우 X
package Study6;
import java.io.*;
import java.util.*;
public class 틱택토 {
static char[][] map;
static boolean[][] visit;
static int N,ans;
static char[] ch;
static int XrowBingo, XcolBingo;
static int OrowBingo, OcolBingo;
static int OCrossBingo , XCrossBingo;
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String s = br.readLine();
if(s.equals("end")) break;
ch = s.toCharArray();
XrowBingo = 0;
XcolBingo = 0;
OrowBingo = 0;
OcolBingo = 0;
OCrossBingo = 0;
XCrossBingo = 0;
map = new char[3][3];
int idx = 0;
int X = 0;
int O = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
map[i][j] = ch[idx++];
if(map[i][j] == 'X') X++;
else if(map[i][j] == 'O') O++;
}
}
if(Math.abs(X - O) > 1 || O > X) {
System.out.println("invalid");
continue;
}
//가로, 세로 검사
for (int i = 0; i < 3; i++) {
int rowX = 0;
int rowO = 0;
int colX = 0;
int colO = 0;
for (int j = 0; j < 3; j++) {
if (map[i][j] == 'X') rowX++;
else if(map[i][j] == 'O') rowO++;
if (map[j][i] == 'X') colX++;
else if(map[j][i] == 'O') colO++;
if(rowO == 3) {
OrowBingo++;
}else if(rowX == 3) {
XrowBingo++;
}else if(colX == 3) {
XcolBingo++;
}else if(colO == 3) {
OcolBingo++;
}
}
}
int crossX=0;
int crossO=0;
//대각선 검사
for (int i = 0; i < 3; i++) {
if (map[i][i] == 'X') crossX++;
else if(map[i][i] == 'O') crossO++;
if(crossO == 3) OCrossBingo++;
if(crossX == 3) XCrossBingo++;
}
crossX=0;
crossO=0;
int temp= 0;
for (int i = 2; i >= 0; i--) {
if (map[i][temp] == 'X') crossX++;
else if(map[i][temp] == 'O') crossO++;
temp++;
if(crossO == 3) OCrossBingo++;
if(crossX == 3) XCrossBingo++;
}
//같은 라인 빙고가 여러개인 경우 (cross제외)
if(XrowBingo > 1 || XcolBingo > 1 || OrowBingo > 1 || OcolBingo>1) {
System.out.println("invalid");
continue;
}
//X와 O가 같으면 O가 이겨야한다
if(X == O) {
if((XrowBingo > 0 || XcolBingo > 0 || XCrossBingo > 0) ) {
System.out.println("invalid");
continue;
}
}else if(X > O) {
//X가 더 크면 X가 이겨야 한다
if(OrowBingo > 0 || OcolBingo > 0 || OCrossBingo > 0) {
System.out.println("invalid");
continue;
}
}
//x와 o의 합이 9인 경우
if(X+O == 9) {
System.out.println("valid");
continue;
}
//빙고가 하나도 없는 경우
if(XrowBingo + XcolBingo + OrowBingo + OcolBingo + OCrossBingo + XCrossBingo == 0) {
System.out.println("invalid");
continue;
}
System.out.println("valid");
}
}
}
반응형
'2. 알고리즘사이트 > 1. 백준' 카테고리의 다른 글
가스관 [백준 2931][JAVA][골드 3][DFS] (0) | 2020.05.15 |
---|---|
미로만들기 [백준 2665][JAVA][골드 4][BFS][PriorityQueue] (0) | 2020.05.15 |
맞춰봐 [백준 1248][JAVA][골드 3][백트래킹][DFS] (0) | 2020.05.03 |
소수 경로 [백준 1963][JAVA][골드5][BFS] (0) | 2020.05.03 |
치킨배달 [백준 15686][JAVA][골드 5][조합] (0) | 2020.05.02 |