이번 문제는 혼자서 하는 틱택토 문제이다.
먼저 틱택토 게임이란, 3X3 보드에 "O" 와 "X"를 순서대로 표기하여, 가로,세로,대각선으로 3개가 같은 표시가 되면 승리하는 게임이다. ("O"가 선공이다)
게임에서는 혼자서 진행하게 되는데, 이렇게 혼자 진행하는 도중에 해당 플레이가 정상적인 플레이인지 비정상적인 플레이인지 확인이 필요하다.
특별한 재항 사항은 없다.
다만 정상정인 게임 사항이라면 1을 아니라면 0을 return 해야 한다.
입출력 예 1,2,3,4를 3X3 보드에 그려넣은 모습이다.
입출력 예 2 번은 OOO 가 된 시점에서 게임이 끝나야 하지만, XXX 로 게임이 더 진행된 모습이다. 따라서 정상적인 플레이가 아니다.
입출력 예 3 번은 O 가 선공임에도 불구하고 X 가 먼저 보드에 놓여졌다.
먼저 비정상적인 플레이에 대해 가정을 해보자.
1. X 가 O 보다 많은 경우 == 무조건 비정상적인 플레이이다. 그 수가 같을 수는 있으나 절대 많아져선 안된다.
2. O 또는 X 가 승리하여 게임이 종료되었는데, 추가적으로 플레이한 경우, 각 개수 확인이 필요하다
3. 둘다 승리한 경우라면 비정상적인 플레이다.
그렇다면 정상적인 상황을 가정해 보자.
1. 아직 승부가 나지 않은 상황이라면, X는 O의 개수보다 한개작거나 같아야 한다.
2. O 가 승리하였을때, 반드시 X의 개수는 O 보다 1개 작아야 한다
3. X 가 승리하였을때, 반드시 O의 개수와 X의 개수가 동일해야 한다.
이제 위 조건을 바탕으로 코드를 작성해 보자.
먼저 해당 board 에서 O, X 의 좌표값을 뽑아내서 각 리스트에 저장해 준다.
이제 이 두 리스트 o, x 를 win() 함수에 넣어 승리 여부를 판단해야 한다.
win 함수는 단순하다. 다만 (1,1) 중앙에 위치한 돌은 양쪽 대각선 둘다 확인해 주어야 한다.
이제 누가 승리한 것인지 확인이 되었기 때문에 조건문에 의해 정상적인 플레이 인지 비정상적인 플레이 인지를 판단해야 한다. 이는 위에서 발견한 규칙을 따르기에 무리없이 판별 가능하다.
'프로그래머스 퀴즈(Python) > level 2' 카테고리의 다른 글
23.04.18 파이썬 코딩 퀴즈#227 리코쳇 로봇(프로그래머스 스쿨) (0) | 2023.04.18 |
---|---|
23.04.18 파이썬 코딩 퀴즈#226 당구 연습(프로그래머스 스쿨) (0) | 2023.04.18 |
23.02.20 파이썬 코딩 퀴즈#164 호텔 대실(프로그래머스 스쿨) (0) | 2023.02.20 |
23.02.20 파이썬 코딩 퀴즈#163 무인도 여행(프로그래머스 스쿨) (0) | 2023.02.20 |
23.02.17 파이썬 코딩 퀴즈#162 뒤에 있는 큰 수 찾기(프로그래머스 스쿨) (0) | 2023.02.17 |