오목은 바둑판에 두 사람이 번갈아 돌을 놓아 가로나 세로, 대각선으로 다섯 개의 연속된 돌을 놓으면 이기는 게임이다.
- 돌을 놓을 수 있는 바둑판의 가로, 세로 길이는 N이다. (5 ≤ N ≤ 15)
- 두 명의 플레이어가 참여하며, 한 명은 검은 돌 다른 한 명은 흰 돌을 사용한다.
- 일반룰을 사용한다.
- 플레이어들은 번갈아가며 바둑판의 빈 교차점에 자신의 돌을 하나씩 놓는다.
- 가로, 세로, 대각선 방향으로 자신의 돌 다섯 개를 연속으로 먼저 놓는 플레이어가 승리한다.
- 한번 놓은 돌은 이동하거나 제거할 수 없다.
- 모든 칸을 채우면 무승부가 된다.
- 어느 한 플레이어가 승리하거나 무승부가 되면 애플리케이션을 종료한다.
- 플레이어가 잘못된 값을 입력할 경우
IllegalArgumentException
을 발생시킨 후 애플리케이션을 종료한다. - 아래의 프로그래밍 실행 결과 예시와 동일하게 입력과 출력이 이루어져야 한다.
- 좌표 입력
- 가로줄: A, B, C, D
- 세로줄: 1, 2, 3, 4
- A1
- O15
- 바둑판 레이아웃
- 검은 돌: X
- 흰 돌: O
- 빈 공간: #
O A B C D E F G H I J K L M N O
15 # # # # # # # # # # # # # # #
14 # # # # # # # # # # # # # # #
13 # # # # # # # # # # # # # # #
12 # # # # # # # # # # # # # # #
11 # # # # # # # # # # # # # # #
10 # # # # # # # # # # # # # # #
9 # # # # # # # # # # # # # # #
8 # # # # # # # # # # # # # # #
7 # # # # # # # # # # # # # # #
6 # # # # # # # # # # # # # # #
5 # # # # # # # # # # # # # # #
4 # # # # # # # # # # # # # # #
3 # # # # # # # # # # # # # # #
2 # # # # # # # # # # # # # # #
1 # # # # # # # # # # # # # # #
O A B C D E F G H I J K L M N O
Turn 1
O A B C D E F G H I J K L M N O
15 # # # # # # # # # # # # # # #
14 # # # # # # # # # # # # # # #
13 # # # # # # # # # # # # # # #
12 # # # # # # # # # # # # # # #
11 # # # # # # # # # # # # # # #
10 # # # # # # # # # # # # # # #
9 # # # # # # # # # # # # # # #
8 # # # # # # # # # # # # # # #
7 # # # # # # # # # # # # # # #
6 # # # # # # # # # # # # # # #
5 # # # # # # # # # # # # # # #
4 # # # # # # # # # # # # # # #
3 # # # # # # # # # # # # # # #
2 # # # # # # # # # # # # # # #
1 # # # # # # # # # # # # # # #
O A B C D E F G H I J K L M N O
흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: A1
Turn 1
O A B C D E F G H I J K L M N O
15 # # # # # # # # # # # # # # #
14 # # # # # # # # # # # # # # #
13 # # # # # # # # # # # # # # #
12 # # # # # # # # # # # # # # #
11 # # # # # # # # # # # # # # #
10 # # # # # # # # # # # # # # #
9 # # # # # # # # # # # # # # #
8 # # # # # # # # # # # # # # #
7 # # # # # # # # # # # # # # #
6 # # # # # # # # # # # # # # #
5 # # # # # # # # # # # # # # #
4 # # # # # # # # # # # # # # #
3 # # # # # # # # # # # # # # #
2 # # # # # # # # # # # # # # #
1 X # # # # # # # # # # # # # #
O A B C D E F G H I J K L M N O
백(O)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: B2
Turn 2
O A B C D E F G H I J K L M N O
15 # # # # # # # # # # # # # # #
14 # # # # # # # # # # # # # # #
13 # # # # # # # # # # # # # # #
12 # # # # # # # # # # # # # # #
11 # # # # # # # # # # # # # # #
10 # # # # # # # # # # # # # # #
9 # # # # # # # # # # # # # # #
8 # # # # # # # # # # # # # # #
7 # # # # # # # # # # # # # # #
6 # # # # # # # # # # # # # # #
5 # # # # # # # # # # # # # # #
4 # # # # # # # # # # # # # # #
3 # # # # # # # # # # # # # # #
2 # O # # # # # # # # # # # # #
1 X # # # # # # # # # # # # # #
O A B C D E F G H I J K L M N O
흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료:
Turn 5
O A B C D E F G H I J K L M N O
15 # # # # # # # # # # # # # # #
14 # # # # # # # # # # # # # # #
13 # # # # # # # # # # # # # # #
12 # # # # # # # # # # # # # # #
11 # # # # # # # # # # # # # # #
10 # # # # # # # # # # # # # # #
9 # # # # # # # # # # # # # # #
8 # # # # # # # # # # # # # # #
7 # # # # # # # # # # # # # # #
6 # # # # # # # # # # # # # # #
5 # # # # # # # # # # # # # # #
4 # # # X # # # # # # # # # # #
3 # # X # # # # # # # # # # # #
2 # X # # # # # # # # # # # # #
1 X O O O O # # # # # # # # # #
O A B C D E F G H I J K L M N O
흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: E5
Result
O A B C D E F G H I J K L M N O
15 # # # # # # # # # # # # # # #
14 # # # # # # # # # # # # # # #
13 # # # # # # # # # # # # # # #
12 # # # # # # # # # # # # # # #
11 # # # # # # # # # # # # # # #
10 # # # # # # # # # # # # # # #
9 # # # # # # # # # # # # # # #
8 # # # # # # # # # # # # # # #
7 # # # # # # # # # # # # # # #
6 # # # # # # # # # # # # # # #
5 # # # # X # # # # # # # # # #
4 # # # X # # # # # # # # # # #
3 # # X # # # # # # # # # # # #
2 # X # # # # # # # # # # # # #
1 X O O O O # # # # # # # # # #
O A B C D E F G H I J K L M N O
BLACK wins!
Turn 2
O A B C D E F G H I J K L M N O
15 # # # # # # # # # # # # # # #
14 # # # # # # # # # # # # # # #
13 # # # # # # # # # # # # # # #
12 # # # # # # # # # # # # # # #
11 # # # # # # # # # # # # # # #
10 # # # # # # # # # # # # # # #
9 # # # # # # # # # # # # # # #
8 # # # # # # # # # # # # # # #
7 # # # # # # # # # # # # # # #
6 # # # # # # # # # # # # # # #
5 # # # # # # # # # # # # # # #
4 # # # # # # # # # # # # # # #
3 # # # # # # # # # # # # # # #
2 # O # # # # # # # # # # # # #
1 X # # # # # # # # # # # # # #
O A B C D E F G H I J K L M N O
흑(X)의 차례입니다. 위치를 입력하세요 (예: A1) 또는 'q'로 종료: q
게임이 종료되었습니다.
- 애플리케이션을 실행하는 시작점은
Application
의main()
이다. - JDK 21 버전에서 실행 가능해야 한다.
- 자바 코드 컨벤션을 지키면서 프로그래밍한다.
- 테스트가 필요한 부분을 판단하여 단위 테스트를 작성한다.
- 한 메서드에 오직 한 단계의 들여쓰기만 한다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 메서드를 분리하면 된다.
- 메서드의 길이는 10줄 이내로 한다. 메서드가 한 가지 일만 하도록 최대한 작게 만들어야 한다.
- 3항 연산자를 쓰지 않는다.
- else 키워드를 쓰지 않는다. (당연히 switch/case 도 금지)
- 4개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 한 줄에 점을 하나만 찍는다.
- 줄여 쓰지 않는다(축약 금지).
- 일급 컬렉션을 사용한다.
- Getter/Setter 사용을 지양한다.
- 주석을 사용하지 말고 소스코드에 의도를 드러낸다.