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 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- argocd
- assertThat
- async/await
- AVG
- AWS
- aws autoscaling
- aws eks
- aws iam role
- AWS KMS
Archives
- Today
- Total
기록
[programmers/java] 혼자서 하는 틱택토 - 시뮬레이션 본문
문제 설명
- url : https://school.programmers.co.kr/learn/courses/30/lessons/160585
입력은 3×3 크기의 문자열 배열로, 각 칸에는 'O', 'X', '.' 중 하나가 들어간다. 이때 해당 보드 상태가 규칙에 어긋나지 않는지 확인하여 유효하면 1, 불가능한 상태면 0을 반환해야 한다.
게임 규칙 요약
- 'O'가 선공이다.
- 한 번에 한 개의 돌만 둘 수 있다.
- 'O'의 개수는 'X'보다 같거나 하나 더 많아야 한다.
- 누군가 승리했다면 게임은 종료되어야 하며, 이후의 착수는 존재할 수 없다.
- 'O'와 'X'가 동시에 이긴 상태는 존재할 수 없다.
풀이 전략
- 보드에서 'O'와 'X'의 개수를 센다.
- 개수 조건을 위반하면 바로 0을 반환한다.
- 각각의 플레이어가 승리했는지 판별한다.
- 승리 조건과 개수 조건이 서로 충돌하지 않는지 확인한다.
- 모든 조건을 만족하면 1을 반환한다.
주요 코드
public int solution(String[] board) {
int oCount = 0, xCount = 0;
for (String row : board) {
for (char c : row.toCharArray()) {
if (c == 'O') oCount++;
else if (c == 'X') xCount++;
}
}
if (xCount > oCount || oCount - xCount > 1) return 0;
boolean oWin = isWin(board, 'O');
boolean xWin = isWin(board, 'X');
if (oWin && xWin) return 0;
if (oWin && oCount != xCount + 1) return 0;
if (xWin && oCount != xCount) return 0;
return 1;
}
승리 조건 판별 함수
public boolean isWin(String[] board, char player) {
for (int i = 0; i < 3; i++) {
if (board[i].charAt(0) == player &&
board[i].charAt(1) == player &&
board[i].charAt(2) == player) return true;
if (board[0].charAt(i) == player &&
board[1].charAt(i) == player &&
board[2].charAt(i) == player) return true;
}
if (board[0].charAt(0) == player &&
board[1].charAt(1) == player &&
board[2].charAt(2) == player) return true;
if (board[0].charAt(2) == player &&
board[1].charAt(1) == player &&
board[2].charAt(0) == player) return true;
return false;
}
'코딩테스트 > Java' 카테고리의 다른 글
[programmers/java] 택배 상자 실기 문제 – Java에서 Stack과 Queue 활용 (0) | 2025.06.19 |
---|---|
[programmers/java] 퍼즐 게임 챌린지 - 이분탐색, 시물레이션 (0) | 2025.06.17 |
백준_Java_22856_트리순회 (0) | 2025.01.13 |
백준_Java_20207_달력 (0) | 2025.01.10 |
백준_Java_14719_빗물 (0) | 2025.01.03 |
Comments