Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 틱택토
- OS
- MESI
- 표현 가능한 이진트리
- MVCC
- Runtime data area
- lis
- 세그멘테이션
- 함께 자라기
- 프로그래머스
- java
- 트랜잭션
- 이분탐색
- Parametric Search
- try-catch-finally
- 실행과정
- synchronized
- 멀티 프로세스
- multi-thread
- 캐시라인
- 이펙티브자바
- 방문길이
- 멀티 스레드
- try-with-resource
- 메모리계층구조
- 자바
- 멀티 코어
- 최장증가부분수열
- lv3
- 아키텍처 개선
Archives
- Today
- Total
siino's 개발톡
[프로그래머스] 혼자서 하는 틱택토 본문
https://school.programmers.co.kr/learn/courses/30/lessons/160585
[문제해결 전략]
1. 백트래킹을 통해 혼자서 틱택토를 진행한다.
2. 게임 종료 조건이 되거나 주어진 board판과 동일한 모양이라면 종료.
게임 종료 조건은 빙고게임과 같이 한 줄이 O또는 X로 채워지는 것입니다.
게임은 턴제의 게임으로 O,X가 번갈아가며 진행하기 때문에 매개변수로 turn값을 주어 현재 누구의 턴인지 확인할 수 있도록 합니다.
class Solution {
char[][] myBoard;
String[] _board;
int answer = 0;
public int solution(String[] board) {
myBoard = new char[3][3];
_board = board;
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
myBoard[i][j] = '.';
}
}
playGame(myBoard, 'O');
return answer;
}
void playGame(char[][] myBoard, char turn){
//주어진 보드판과 동일한 모양이라면 answer 갱신 후 종료
if(findAnswer(myBoard, _board)){
answer = 1;
return;
}
//한 줄이 채워진 종료 조건이라면 종료
if(isFinished(myBoard)) return;
//틱택토 게임 진행
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if(myBoard[i][j] == '.'){
myBoard[i][j] = turn;
playGame(myBoard, (char)('O' + 'X' - turn));
myBoard[i][j] = '.';
}
}
}
}
public boolean findAnswer(char[][] myBoard, String[] board){
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if(myBoard[i][j] != board[i].charAt(j)) return false;
}
}
return true;
}
public boolean isFinished(char[][] board){
//게임 종료 조건(한 줄이 다 채워지는 경우)
if(
board[0][0] != '.' && board[0][0] == board[0][1] && board[0][1] == board[0][2] ||
board[1][0] != '.' && board[1][0] == board[1][1] && board[1][1] == board[1][2] ||
board[2][0] != '.' && board[2][0] == board[2][1] && board[2][1] == board[2][2] ||
board[0][0] != '.' && board[0][0] == board[1][0] && board[1][0] == board[2][0] ||
board[0][1] != '.' && board[0][1] == board[1][1] && board[1][1] == board[2][1] ||
board[0][2] != '.' && board[0][2] == board[1][2] && board[1][2] == board[2][2] ||
board[0][0] != '.' && board[0][0] == board[1][1] && board[1][1] == board[2][2] ||
board[0][2] != '.' && board[0][2] == board[1][1] && board[1][1] == board[2][0]
) return true;
return false;
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 아이템 줍기 (0) | 2024.03.04 |
---|---|
달리기 경주 - 코틀린 (1) | 2024.02.28 |
[프로그래머스] 입국심사 (1) | 2024.02.07 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT[1차] 프렌즈4블록 (1) | 2024.01.26 |
[프로그래머스] 방문길이 (1) | 2024.01.24 |