250x250
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
- joystick
- Hp바
- Object Poling
- LayerMark
- apk
- Animation State Machine
- 플레이어 이동
- Ainimation Blending
- 2D슈팅게임
- 스크롤링
- Object Pooling
- 일시정지
- 오브젝트 풀링
- 프리팹
- CSharp #자료구조
- Scrooling
- rigidbody
- Prefabs
- 유니티
- Parallax
- Transform
- 플레이어 방향전환
- 패럴렉스
- raycast
- Hpbar
- Blend Type
- rotation
- raycasting
- Unity
- Vector3
Archives
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.2 혼자서 하는 틱택토 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
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;
}
}
728x90
'Programmers - C# > CodingTest 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 |