링크 : https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
틱택토가 실패하는 경우의 수 생각하기
1. X의 개수가 O 보다 많을 수 없다.
2. O와 X의 개수 차이는 0, 1만 가능하다.
3. 'OOO'와 'XXX'가 동시에 만들어질 수 없다.
4. 'OOO'가 만들어졌을 때, O의 개수가 X 보다 1개 더 많아야 한다.
5. 'XXX'가 만들어졌을 때, O와 X의 개수가 같아야 한다.
class Solution {
public int solution(String[] board) {
int answer = 1;
int cntO3 = 0; int cntX3 = 0; // "OOO", "XXX" 개수
int cntO = 0; int cntX = 0; // 총 O, X 개수
String str1 = board[0];
String str2 = board[1];
String str3 = board[2];
for(int i=0; i<3; i++) {
// 세로로 만들어질 수 있는 'OOO', 'XXX' 개수
if( (str1.charAt(i) == str2.charAt(i)) && (str2.charAt(i) == str3.charAt(i)) ) {
if(str1.charAt(i) == 'X') {
cntX3 += 1;
} else if(str1.charAt(i) == 'O') {
cntO3 += 1;
}
}
}
// 대각선으로 만들어질 수 있는 'OOO', 'XXX' 개수
if( (str1.charAt(0) == str2.charAt(1)) && (str2.charAt(1) == str3.charAt(2)) ) {
if(str1.charAt(0) == 'X') {
cntX3 += 1;
} else if(str1.charAt(0) == 'O') {
cntO3 += 1;
}
}
if( (str1.charAt(2) == str2.charAt(1)) && (str2.charAt(1) == str3.charAt(0)) ) {
if(str1.charAt(2) == 'X') {
cntX3 += 1;
} else if(str1.charAt(2) == 'O') {
cntO3 += 1;
}
}
for(int i=0; i<3; i++) {
String str = board[i];
// 가로로 만들어질 수 있는 'OOO', 'XXX' 개수
if("OOO".equals(str)) {
cntO3 += 1;
} else if("XXX".equals(str)) {
cntX3 += 1;
}
for(int j=0; j<str.length(); j++) {
char c = str.charAt(j);
if(c == 'O') {
cntO += 1;
} else if(c == 'X') {
cntX += 1;
}
}
}
// X의 개수가 O보다 많을 수 없다.
if(cntX > cntO) {
return 0;
}
// O와 X의 개수 차이는 0, 1만 가능하다.
if(cntO - cntX >= 2) {
return 0;
}
// 'OOO', 'XXX'가 모두 만들어지는 것은 불가능하다.
if(cntO3 >= 1 && cntX3 >= 1) {
return 0;
}
// 'OOO'가 만들어졌을 때, O의 개수가 X보다 1개 많아야 한다.
if(cntO3 > 0) {
if(cntO - cntX != 1) {
return 0;
}
}
// 'XXX'가 만들어졌을 때, O와 X의 개수가 같아야 한다.
if(cntX3 > 0) {
if(cntO != cntX) {
return 0;
}
}
return answer;
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] 뒤에 있는 큰 수 찾기(Java), 스택 사용 (0) | 2024.03.19 |
|---|---|
| [프로그래머스] 리코쳇 로봇(Java) (2) | 2024.03.06 |
| [프로그래머스] 무인도 여행(Java), 너비 우선 탐색(BFS) 알고리즘 (0) | 2024.02.14 |
| [프로그래머스] 숫자 변환하기(Java), DP & BFS 알고리즘 (1) | 2024.02.13 |
| [프로그래머스] 시소 짝궁(Java) (1) | 2024.02.06 |