파이썬 공부하기 시작한지 한 5일정도 됐는데
어제던가 이틀전이던가 누가 8x8체스판에 8개의 말을 서로 가로,세로,대각선에 겹치지 않게 놓는 경우의 수를 찾는 문제를 올렸길래
n x n에서 경우의수랑, 그 경우의 수에 대응하는 좌표를 뽑는걸 만들어보면 어떨까 싶어서 오늘 해봤는데
폭삭 망한거 같습니다. 안돌아가요....
일단 파이썬으로 돌려봐도 에러는 안뜨는거 보면 알고리즘에 문제가 있는거 같은데..
어디서 문제가 있는지 모르겠습니다.
제가 짠 코드는 이런식입니다.
n값을 받음
-> n x n 행렬을 생성
-> 각각의 행렬에 해당하는 포인트에 (좌표, 다른 말과 겹치는 칸인지 TF, 말을 놓은 칸인지 TF)를 알 수 있는 클래스를 부여
-> 1열에서 순서대로 하나를 선택(for), 그 좌표에 해당하는 포인트의 3번째 속성값을 T로 변경
-> 1열에 놓은 말과 가로,세로,대각선을 공유하는 포인트의 2번째 속성값을 F로 변경
-> 2열의 포인트 중 2번째 속성이 T인 포인트의 세로축 값을 구한 뒤 제너레이터로 구성
-> 생성된 2열의 제너레이터에서 순서대로 하나를 선택(for), 그 좌표에 해당하는 포인트의 3번째 속성값을 T로 변경
-> ..... (재귀함수)
만약 마지막 열에 도달하기 전에, 혹은 마지막 열에 도달할때 생성된 제너레이터가 값을 가지고 있지 않다면 다음 포인트를 선택(pass)
만약 마지막 열에 도달했고, n개의 말을 모두 놓았다면 카운트 1증가 + 말이 놓여진 포인트의 좌표들로 이루어진 리스트를 생성
[removed][removed]
이렇게 만들어진 코드가 아래 링크입니다.
https://gist.github.com/anonymous/10163ec11b86d31205545e082b9bacd9어디에 문제가 있는걸까요...ㅠㅠ
저도 처음배울때 이런질문을했죠. 방대한 코드를 두고 교수님 이게 왜 안될까요? 그때 교수님의 굳어진 표정이 무얼 의미하는지 몰랐숨미다. 이제 알았죠. 이런 질문을 가장 사람두리 싫어한다는걸요. 공부는 무의미함미다
n-queen으로 찾아봐양 - 164260의 휘발성 계정