알고리즘 문제 풀이: 파이썬/BOJ

[BOJ_16955] 오목, 이길 수 있을까?

hueco 2023. 11. 23.

 

📌 문제 링크: https://www.acmicpc.net/problem/16955

 

16955번: 오목, 이길 수 있을까?

구사과와 큐브러버는 10×10 크기의 바둑판에서 오목을 하고 있다. 턴은 구사과가 먼저 갖는다. 바둑판의 상태가 주어진다. 구사과가 턴을 한 번 더 가졌을 때, 이길 수 있는지 구하는 프로그램을

www.acmicpc.net

 

내 풀이(Success) :

 

🧐 Review:

1차 시도)

 2차원 배열의 크기가 10 * 10으로 크지 않기 때문에 완전 탐색으로 2중 반복문을 돌면서 '.'을 'X'로 바꾸고 해당 좌표를 기준으로 상, 하, 좌, 우 그리고 대각선을 2중 반복문으로 'X'의 개수가 5개인지 체크하고, 체크가 끝나면 다시 변환했던 'X'를 '.'으로 되돌려서 계속해서 반복문을 순환하면서 정답을 찾도록 구상했다. 그런데, 2중 반복문으로 2차원 배열의 대각선과 열칼럼을 탐색할 때 인덱스 처리가 꼬여서 문제가 쉽게 풀리지 않았다.

 

2차 시도)

 처음 시도한 방법이 내 생각대로 코드가 잘 작성되지 않아서 구글링을 통해 정답 코드를 확인했다. 글 작성 기준으로 파이썬으로 작성된 풀이들은 너무 단순하고 무작정 배열을 확인하는 방법들이라서 c++로 작성된 코드를 보면서 파이썬 코드에 맞게 위와 같이 수정했다.

 

위 방법은 방향벡터를 사용해서 'X'를 기준으로 상, 하, 좌, 우 그리고 대각선을 확인해서 'X'의 개수가 4개, '.'의 개수가 1개인지 확인한다. 이 경우에는 구사과의 턴에 바둑돌을 놓아 오목을 완성할 수 있기 때문에 구사과가 게임에서 승리할 수 있게 된다.

 

 

 

 

'알고리즘 문제 풀이: 파이썬 > BOJ' 카테고리의 다른 글

[BOJ_19948] 음유시인 영재  (0) 2023.12.19
[BOJ_16113] 시그널  (0) 2023.11.23
[BOJ_13335] 트럭  (0) 2023.11.19
[BOJ_20006] 랭킹전 대기열  (0) 2023.11.18
[BOJ_20365] 블로그2  (0) 2023.11.18

댓글