티스토리 툴바


네이버 카페에서 발견한 문제.

문제

10*10 칸 즉 100칸의 그랜드체스판이 있습니다

X와 Y좌표를 지정합니다 그리고  그 지점에 나이트(KNIGHT)를 놓습니다 이 나이트를 한 점으로 보고

체스판100칸을 모두 이동할수 있는 로직을 설계하세요~

 

 

- 조건 : 반드시 재귀함수를 씁니다. (다른함수로만쓰면 쉽습니다.)

- 상식:  1.  체스는 칸 안에 말을 놓습니다.

            2. 나이트는 한턴에 앞으로 한칸 같은방향대각선으로 한칸 진행합니다. (<ex> x+2, y+1 혹은 x-2, y-1 등)

- 힌트 : 1. 나이트는 임의의 한곳에 놓되 return되는 값이 가장 적은곳으로 가야 모든 자리로 돌수 있습니다.

              즉, 한나이트가 중심으로부터- /+ 중심에 놓였을때 갈수있는값은 총 8개 입니다

              이 8개는 각각 8개씩 퍼져나가고 끝에 이르면 return되어 자기자신에 돌아옵니다. 이것이 재귀함수입니다.

              이 반환되는 값을 비교하여 말을 보낸다면 값을구하기에 용이합니다.

 

            2. {0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0,
                 0,0,0,0,0,0,0,0,0,0

                 }

   3. 재귀함수는 여러번 쓰입니다.


실마리

길 찾기 문제와 유사하다. 기본적으로 더 이상 이동할 수 없다면 되돌아가서 다른 방향으로 전환 가능하도록 해야 한다. 

소스 코드

소스 코드 보기


소감

시간이 참 오래 걸리는 문제이다.
코드는 간단한데 10x10 에서는 너무 많은 경우의 수가 발생되어서 왠만큼 시간을 투자하지 않으면 결과를 보기 힘들다.
일단 작은 사이즈에서의 테스트에서는 정상적으로 동작하는 것으로 보아 10x10... 또는 그 이상도 문제 없이 동작할 것으로 생각되나... 테스트를 완료하지 못한 점이 아쉽다. 

AMD Phenom  8450 Triple-Core 2.1GHz에서는 10x10으로 크기를 잡아 돌리면 하루 종일 돌려도 계속 진행중이더라...;;
저작자 표시 비영리 변경 금지
프로그래밍/C/C++ l 2011/12/13 17:47

TRACKBACK :: http://tasia.tistory.com/trackback/202 관련글 쓰기

댓글을 달아 주세요

  1. BlogIcon bao ve  댓글주소  수정/삭제  댓글쓰기

    고마워요, 좋은 하루 소원

    2012/01/19 18:47

1 2 3 4 5  ... 138 

카테고리

분류 전체보기 (138)
내가보는 세상 (40)
컴퓨터관련 (48)
Games (13)
프로그래밍 (20)
OS Platform (14)

달력

«   2012/01   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
get rsstistory! Tistory Tistory 가입하기!