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 |
Tags
- 2870번 c++
- 백준 c++ 2870번
- Lv.3
- 프로그래머스
- 백준 1103번
- Beakjoon
- 백준 c++ 2468번
- 백준
- 백준 17070번
- C#
- 17070번
- 2870번
- 백준 1103번 c++
- 2870번 수학숙제
- dfs
- Lv2
- 오브젝트 풀링
- 유니티
- Unity
- c++
- 수학숙제
- 백준 1103번 게임
- 2468 c++
- 플레이어 이동
- 코테
- 코딩테스트
- 백준 17070번 c++
- 백준 2870번
- Algorithm
- 2870번 수학숙제 c++
Archives
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.2 혼자서 하는 틱택토 본문
https://school.programmers.co.kr/learn/courses/30/lessons/160585
1. 정답코드 및 핵심 아이디어, 유의사항
- 주먹구구 예외처리 문제로, 간단해 보였지만 생각보다 예외 상황을 찾는 게 골치아팠던 문제
1) 한번 씩 번갈아가며 둠
- 후공이 더 많을 수 없고, 선공은 후공과 같거나 1이 커야 함
2) 빙고가 생기면 게임은 종료됨
- 선공이 이겼다면 후공은 둘 수 없고, 후공이 이겼다면 선공은 둘 수 없음
- 선공과 후공이 모두 빙고가 생길 수 없음
+ 단, 빙고는 한번에 2개가 생길 수 있으며, 선공만 가능함 ( 생길 수 있는 경우의 수 - 표 참조 )
O X O X O X O X O |
O O O O X X O X X |
X O X O O O X O X |
주석 참조
using System;
public class Solution
{
public int solution(string[] board)
{
int countO = 0; // 선공 개수
int countX = 0; // 후공 개수
int bingoO = 0; // 선공 빙고 개수
int bingoX = 0; // 후공 빙고 개수
// 선공 후공 개수 파악
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
if (board[y][x] == 'O') countO++;
else if (board[y][x] == 'X') countX++;
}
}
// 후공이 더 둔 경우
if (countO < countX)
return 0;
// 선공이 연속해서 둔 경우
if (countO - 1 > countX)
return 0;
// 대각선 빙고 체크
if (board[1][1] == 'O')
{
if (board[0][0] == 'O' && board[2][2] == 'O') bingoO++;
if (board[0][2] == 'O' && board[2][0] == 'O') bingoO++;
}
else if (board[1][1] == 'X')
{
if (board[0][0] == 'X' && board[2][2] == 'X') bingoX++;
if (board[0][2] == 'X' && board[2][0] == 'X') bingoX++;
}
// 가로 빙고 체크
for (int i = 0; i < 3; i++)
{
if (board[i] == "OOO") bingoO++;
else if (board[i] == "XXX") bingoX++;
}
// 세로 빙고 체크
for (int x = 0; x < 3; x++)
{
if (board[0][x] == 'O' && board[1][x] == 'O' && board[2][x] == 'O') bingoO++;
else if (board[0][x] == 'X' && board[1][x] == 'X' && board[2][x] == 'X') bingoX++;
}
// 둘다 빙고가 있는 경우
if (bingoX > 0 && bingoO > 0)
return 0;
// 선공이 이겼는데 후공이 둔 경우
if (bingoO > 0 && countO == countX)
return 0;
// 후공이 이겼는데 선공이 둔 경우
if (bingoX > 0 && countO > countX)
return 0;
return 1;
}
}
'CodingTest > Programmers Lv.2' 카테고리의 다른 글
[프로그래머스 C#] Lv.2 전력망을 둘로 나누기 (0) | 2024.01.22 |
---|---|
[프로그래머스 C#] Lv.2 우박수열 정적분 (0) | 2024.01.16 |
[프로그래머스 C#] Lv.2 리코쳇 로봇 (0) | 2024.01.10 |
[프로그래머스 C#] Lv.2 / 2개 이하로 다른 비트 (1) | 2024.01.08 |
[프로그래머스 C#] Lv.2 도넛과 막대 그래프 (0) | 2024.01.05 |