ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2019.04.11] N-queens 스프린트를 진행하며..
    핵인싸 개발자의 길/코드스테이츠 Immersive Course 2019. 4. 12. 00:34

    # N-queens에 대한 설명

    n개의 체스판이 있다. 퀸은 체스판에서 가로, 세로, 대각선으로 움직일 수 있다. n * n의 체스판에서 n개의 퀸이 서로 이동경로가 겹치지 않도록 놓여져야 한다.

    옆의 그림에 보면 8*8의 체스판이 있고 8개의 퀸이 있다. 각 퀸의 말은 가로,세로,대각선 이동경로가 겹치지 않는다. 

     

     

     

     

     

    # 내가 생각한 N-queens를 풀어가는 방식

    • 4 * 4의 배열이 있다
    • row의 인덱스를 i, colume의 인덱스를 j로 한다.
    • [0,0] 위치에서부터 시작한다. 

    [0,0]  시작점에서 해당 colume만큼(해당 줄만) for문을 돌린다. for문을 한번 돌 때마다, 해당 위치에서 row+1로 리커션 한다. 그럼 다음 row에서 해당 colume만큼 또 for문을 돌린다. 해당 for문에서도 한번 돌 때마다 row+1로 리커션 한다. 리커션 시 row가 n(배열길이)가 넘어가면 return한다. 그러면 왼쪽 사진처럼 한 줄에 돌이 하나씩 놓이게 된다.

     

     

     

    제일 아래쪽부터 전체적으로 충돌이 나지 않는지 확인한다. 있으면 다음 돌로 옮긴다. 없으면 count를 1 증가시킨다.

     

     

    해당 rowd의 colume까지 다 돌면

    해당 리커션이 끝나고 돌아와서, 이전의 row의 colume이 다음 자리로 넘어간다. 

    이렇게 하면 모든 경우의 돌을 한번씩 놓으며 검사를 할 수 있다.

     

     

     

    # 코드 구현 중 어려웠던 부분

    사실 짜여진 틀에서 코드를 구현하려니까 코드파악이 제일 어려워다. 무슨 백본(?)인가...그 라이브러리가 어떻게 동작하는지도 모르고...this.get()이나, this.rows()나...뭐 그런거를 써서 배열을 접근해야하고 그러다보니까... 코드파악이 제일 어려웠다. 두번째로는... 사실 나는 페어 프로그래밍이 너무 어려웠다... 내가 생각하는 방식으로 하면 쉽게 할 수 있었을 것 같은데, 페어분과의 의견충돌..이라기보단 주장이 강하셨던 페어분의 의견에 맞추어서 하려고 하다보니, 페어가 맞춰가는 틀에서만 해결법을 찾으려니까 그게 너무 힘들었던 것 같다.ㅜㅜ

    뭐...알고리즘이 어렵다, 지옥의 N-queens이다. 고통의 시간이다. 등등 말하고는 시작했는데... 사실 나는 어려운건가..잘 모르겠다..;; 이것보다 더 난이도 있는 알고리즘 문제를 많이 풀어봐서;; '프로그래머스'에서는 중, 중하 정도 수준? (만약 백본인가 그런 라이브러리 틀에서 말고 순수 나 혼자 구현을 한다면!)

     

     

     

    반응형

    댓글

Designed by Tistory.